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.

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}

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

15

Avec dictcompréhension:

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

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]}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.