Vous avez mentionné dans les commentaires que vous avez des entrées en double. Nous pouvons travailler avec ça. Prenez votre méthode préférée de générer la liste des tuples, et l'étendre dans une boucle for
:
from itertools import izip
dictionary = {}
for k, v in izip(List[::2], List[1::2]):
if k not in dictionary:
dictionary[k] = set()
dictionary[k].add(v)
Ou nous pourrions utiliser collections.defaultdict
donc nous ne devons pas vérifier si une clé est déjà initialisé:
from itertools import izip
from collections import defaultdict
dictionary = defaultdict(set)
for k, v in izip(List[::2], List[1::2]):
dictionary[k].add(v)
Nous finirons par un dictionnaire où toutes les clés sont des ensembles, et les ensembles contiennent les valeurs. Cela peut ne pas convenir, car les ensembles, comme les dictionnaires, ne peuvent pas contenir de doublons. Par conséquent, si vous avez besoin d'une seule clé pour contenir deux de la même valeur, vous devez la remplacer par un n-uplet ou une liste. Mais cela devrait vous aider à démarrer.
Vous pouvez prendre les '[]' s pour modifier la compréhension de liste à un générateur pour une plus grande efficacité: 'dict ((Liste [i], Liste [i + 1]) pour i dans la plage (0 , len (List), 2)) 'De cette façon, il ne générera pas de liste pour ensuite le jeter après qu'il est converti en dict. –
Vous mon ami êtes un épargnant de vie, que Dieu vous bénisse. Cela fait maintenant deux heures que je suis sur –
OK, la chose que j'ai laissée en premier pour la compatibilité py2.3, et aussi le fait que j'ai entendu exactement le contraire - pour les très petites collections, la construction de la liste est plus vite que les frais généraux de la construction du générateur. Je peux demander à mon collègue plus de détails à ce sujet, mais cela a du sens. – zzzeek