J'ai 2 listes 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]]
4 Réponses :
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
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.
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])
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.
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(" ")
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]]
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
"" code>@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.