5 votes

Liste de tuples vers dictionnaire avec clés dupliquées via compréhension de liste ?

J'ai une liste de tuples avec des doublons et je les ai convertis en un dictionnaire en utilisant ce code que j'ai trouvé ici :

https://stackoverflow.com/a/61201134/2415706

mylist = [(a,1),(a,2),(b,3)]    
result = {}
for i in mylist:  
   result.setdefault(i[0],[]).append(i[1])
print(result)
>>> result = {a:[1,2], b:[3]}

Je me souviens avoir appris que la plupart des boucles for peuvent être réécrites sous forme de compréhensions. J'ai donc voulu m'exercer, mais cela fait une heure que je n'arrive pas à en faire fonctionner une.

J'ai lu ceci : https://stackoverflow.com/a/56011919/2415706 et maintenant je n'ai pas été capable de trouver une autre bibliothèque qui fait cela mais je ne suis pas non plus sûr que cette compréhension que je veux écrire soit une mauvaise idée puisque append mute les choses.

7voto

blhsing Points 57682

La compréhension est destinée à mettre en correspondance des éléments dans une séquence indépendante les uns des autres, et ne convient pas pour les agrégations telles que le cas dans votre question, où la sous-liste à laquelle un élément s'ajoute dépend d'une sous-liste à laquelle un élément précédent s'ajoute.

Vous pouvez produire la sortie désirée avec une compréhension imbriquée si vous le devez, mais cela transformerait ce qui aurait été résolu en O(n) la complexité du temps avec une boucle en une qui prend O(n ^ 2) à la place :

{k: [v for s, v in mylist if s == k] for k, _ in mylist}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X