0
votes

Ajouter une chaîne vide tout en rejoignant les 2 listes - Python

J'ai 2 listes xxx pré>

Si je vous joint à la fois à la liste basée sur la première condition d'élément en utilisant ci-dessous Code P>

[['RD-12',12,'a',67],['RD-13',45,'c'," "],['RD-15',50,'e',65]]


3 commentaires

Dans votre exemple, vous avez un espace dans votre "chaîne vide" et il n'est donc pas une chaîne vide mais une chaîne constituée d'un espace. Vous obtenez une chaîne vide avec ""


@Yatu: Non, vérifiez uniquement le premier élément. Si aucun second élément de subliste, il devrait ajouter une chaîne vide (un espace spécifique comme un élément sur ce subliste) à celui


Vous devez faire boucle sur la liste principale, pas subliste.


4 Réponses :


1
votes

Vous pouvez simplement passer à travers la liste des résultats et vérifier où le nombre total de vos éléments est 2 au lieu de 3.

def combinelist(mainlist,sublist):
   dict1 = { e[0]:e[1:] for e in mainlist }
   list2 = [e[0] for e in sublist]
   for e in sublist:
      try:
         dict1[e[0]].extend(e[1:])
      except:
         pass
   for e in dict1.keys() - list2:
       dict1[e].append(" ")
   result = [[k] + v for k, v in dict1.items()]
   return result


2 commentaires

Cela ne peut pas être fait de cette manière, comme j'ai donné des exemples de liste dans la question. Les articles de Sublist sont plus et ne peuvent pas être comptables.


J'ai ajouté la mise à jour de votre édition. Il ajoute quelques lignes à votre code, car il fonctionne.



0
votes

Vous pouvez essayer quelque chose comme ceci:

mainlist=[['RD-12',12,'a'], ['RD-13',45,'c'], ['RD-15',50,'e']]
sublist=[['RD-12',67], ['RD-15',65]]

maindict = {a:[b, c] for a, b, c in mainlist}
subdict = dict(sublist)
result = []

for k in list(set(list(maindict.keys()) + list(subdict.keys()))):
    result.append([k, ])
    result[-1].extend(maindict.pop(k, ' '))
    result[-1].append(subdict.pop(k, ' '))

sorted(result, key=lambda x: x[0])


2 commentaires

Les sous-éléments de la liste principale ont plus de 2. Comme j'ai donné l'exemple comme ça. Maintenant, j'ai aussi modifié la question. C'est pourquoi je convertit 1 élément comme clé et ajoutez les éléments.


OK, cette mise à jour devrait fonctionner ... Pour tout tuple de plus de deux, on utilise la coulée récursive et l'ajoute pour résulter en tant que prolongation. Pour les tuples de deux, utilisez la coulée de dict directe et ajoute aux résultats avec ANNEXE.



1
votes

Votre problème peut être résolu en utilisant une boucle tandis que de régler la longueur de vos sublistes jusqu'à ce qu'il correspond à la longueur du subliste le plus long en ajoutant la chaîne recherchée.

for list in result:
    while len(list) < max(len(l) for l in result):
        list.append(" ")


0 commentaires

0
votes

Une autre option consiste à convertir le subliste en dict, les éléments sont donc facilement accessibles et rapidement.

for i, e in enumerate(mainlist):
  data = sublist_dict.get(e[0])
  if data: mainlist[i].append(data)

print(mainlist)
#=> [['RD-12', 12, 'a', 67], ['RD-13', 45, 'c'], ['RD-15', 50, 'e', 65]]


0 commentaires