Erreur de création du dictionnaire Python
-
06-07-2019 - |
Question
J'essaie de créer un dictionnaire Python à partir d'une liste stockée. Cette première méthode fonctionne
>>> myList = []
>>> myList.append('Prop1')
>>> myList.append('Prop2')
>>> myDict = dict([myList])
Cependant, la méthode suivante ne fonctionne pas
>>> myList2 = ['Prop1','Prop2','Prop3','Prop4']
>>> myDict2 = dict([myList2])
ValueError: dictionary update sequence element #0 has length 3; 2 is required
Je me demande donc pourquoi la première méthode utilisant append fonctionne mais que la seconde ne fonctionne pas? Existe-t-il une différence entre myList
et myList2
?
Modifier
Vérifié à nouveau myList2
contient en réalité plus de deux éléments. Deuxième exemple mis à jour pour refléter cela.
La solution
Vous le faites mal.
Le constructeur dict ()
ne prend pas une liste d'éléments (encore moins une liste contenant une seule liste d'éléments), il prend un élément itérable de deux éléments. Donc, si vous avez changé votre code pour être:
myList = []
myList.append(["mykey1", "myvalue1"])
myList.append(["mykey2", "myvalue2"])
myDict = dict(myList)
Vous obtiendrez alors ce que vous attendez:
>>> myDict
{'mykey2': 'myvalue2', 'mykey1': 'myvalue1'}
La raison pour laquelle cela fonctionne:
myDict = dict([['prop1', 'prop2']])
{'prop1': 'prop2'}
C’est parce qu’il l’interprète comme une liste contenant un élément, une liste contenant deux éléments.
Le constructeur dict
prend son premier argument et exécute un code similaire à celui-ci:
for key, value in myList:
print key, "=", value