161 votes

Liste des tuples au dictionnaire

Voici comment je convertis actuellement une liste de tuples en dictionnaire en Python :

 l = [('a',1),('b',2)]
h = {}
[h.update({k:v}) for k,v in l]
> [None, None]
h
> {'a': 1, 'b': 2}

Existe-t-il un meilleur moyen? Il semble qu'il devrait y avoir une seule ligne pour le faire.

305voto

Sven Marnach Points 133943

Appelez simplement dict() sur la liste des tuples directement

 >>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}

30voto

pegah Points 459

Il semble que tout le monde ici suppose que la liste des tuples a un mappage un à un entre la clé et les valeurs (par exemple, elle n'a pas de clés dupliquées pour le dictionnaire). Comme il s'agit de la première question de recherche sur ce sujet, je poste une réponse pour un cas plus général où nous devons traiter des doublons :

 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]}

25voto

FogleBird Points 23405

Le constructeur dict accepte les entrées exactement telles que vous les avez (tuples clé/valeur).

 >>> l = [('a',1),('b',2)]
>>> d = dict(l)
>>> d
{'a': 1, 'b': 2}

A partir de la documentation :

Par exemple, ceux-ci renvoient tous un dictionnaire égal à {"un": 1, "deux": 2} :

 dict(one=1, two=2)
dict({'one': 1, 'two': 2})
dict(zip(('one', 'two'), (1, 2)))
dict([['two', 2], ['one', 1]])

23voto

WaKo Points 7674

Avec dict compréhension :

 h = {k:v for k,v in l}

2voto

vladimir77 Points 1216

Décision fonctionnelle pour la réponse @pegah :

 from itertools import groupby

mylist = [('a', 1), ('b', 3), ('a', 2), ('b', 4)]
#mylist = iter([('a', 1), ('b', 3), ('a', 2), ('b', 4)])

result = { k : [*map(lambda v: v[1], values)]
    for k, values in groupby(sorted(mylist, key=lambda x: x[0]), lambda x: x[0])
    }

print(result)
# {'a': [1, 2], 'b': [3, 4]}

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