Liste des tuples à dictionnaire

112

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}

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

Sarah Vessels
la source

Réponses:

179

Il suffit d'appeler dict()directement la liste des tuples

>>> my_list = [('a', 1), ('b', 2)]
>>> dict(my_list)
{'a': 1, 'b': 2}
Sven Marnach
la source
1
Derp, je savais qu'il y aurait un moyen simple de le faire ... Venant de Ruby ici, essayant d'apprendre la manière Python de faire les choses. Merci!
Sarah Vessels le
5
@chandresh Cela fait en Python 3, donc pas de mise à jour est nécessaire.
Sven Marnach
@SvenMarnach, voici ma sortie de la même commande que vous avez écrite ci-dessus sur le terminal py 3.5. Traceback (dernier appel le plus récent): Fichier "<ipython-input-313-7bb3559567ff>", ligne 1, dans <module> dict (ma_liste) TypeError: L'objet 'Dictionary' n'est pas appelable
CKM
4
@chandresh Cela n'a rien à voir avec Python 3 - c'est parce que vous avez une variable appelée dict, occultant le Python intégré du même nom. Vous ne devriez jamais faire ça.
Sven Marnach
@SvenMarnach Oh. Merci. Ça a marché. En fait, j'ai obtenu du code sur le Web et j'ai essayé de l'exécuter. On dirait que l'auteur a utilisé dictcomme nom de variable d'où j'ai eu l'erreur. Merci encore.
CKM
23

Le dictconstructeur accepte l'entrée exactement comme vous l'avez (tuples clé / valeur).

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

De la documentation :

Par exemple, ils renvoient tous un dictionnaire égal à {"one": 1, "two": 2}:

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

Avec dictcompréhension:

h = {k:v for k,v in l}
Kenly
la source
4
agréable car il vous permet de mettre en forme la clé / valeur avant de l'ajouter au dict
jfunk
7

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 qui se pose 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]}
Pegah
la source