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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top