Python dictionnaire création d'erreur
Je suis en train de créer un dictionnaire Python à partir d'un stockées liste. Cette première méthode est la
>>> myList = []
>>> myList.append('Prop1')
>>> myList.append('Prop2')
>>> myDict = dict([myList])
Toutefois, 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
Alors je me demande pourquoi la première méthode utilisant append fonctionne, mais la deuxième méthode ne fonctionne pas? Est-il une différence entre myList
et myList2
?
Modifier
Vérifié à nouveau myList2
a fait plus de deux éléments. Mis à jour deuxième exemple pour tenir compte de cela.
- "Est-il une différence entre maliste et myList2?" Ce n'
myList == myList2
dire? Ces deux méthodes de travail pour moi avec Python 2.5. - Je ne vois pas cette erreur soit avec 2.5.2 ou 3.1.1 - sûr il n'y a pas une faute de frappe quelque part? Ces listes doivent être identiques.
- il fonctionne pour moi sur Python 2.6.2
- Fonctionne pour moi sur 2,6
- Ils travaillent tous les deux pour moi. Je suppose que dans le deuxième exemple, vous n'avez pas vraiment le type de crochets dans
dict([mylist2])
. Êtes-vous sûr de ne pas écriredict(mylist2)
? - La 2e méthode a bien fonctionné pour moi sur les deux systèmes. On court 2.4.3 et les autres 2.6. J'ai essayé de chercher des bugs sur le Python.org les pages, mais pour une raison quelconque, le lien sur le Python de la page de l'outil de suivi ne fonctionne pas pour moi.
- Comme d'autres l'ont dit, votre code affiché doit travailler. Mais la façon dont vous êtes le remplissage de
myList
et de l'utiliser dans ladict()
constructeur implique que vous êtes en train de faire quelque chose de mal avec elle, et l'erreur que vous obtenez soutient que cette implication. Le plus probable questions quemyList2
a plus de deux éléments, ou que vous n'êtes pas d'emballagemyList2
dans un autre objet iterable lorsque vous passez àdict()
. L'un de ces pourrait être résolu si vous avez utilisé un 2-tuple au lieu d'une liste ici, puisque c'est une meilleure structure pour représenter une paire clé-valeur. - Ah oui, comme je le soupçonnais, vous êtes à l'aide de
myList2
comme un objectif général de liste. C'est incorrect -- que vous l'utilisez, il doit avoir exactement deux éléments (une clé et une valeur correspondante). - Ironie du sort, vous avez mal orthographié "dictionnaire" !!!
Vous devez vous connecter pour publier un commentaire.
Vous le faites mal.
La
dict()
constructeur ne prend pas une liste d'éléments (et encore moins une liste contenant une seule liste d'articles), il prend un objet iterable 2-élément iterables. Donc, si vous avez modifié votre code:Alors, vous obtiendrez ce que vous attendez:
La raison que cela fonctionne:
Est parce que c'est l'interprétant comme une liste qui contient un élément qui est une liste qui contient les deux éléments.
Essentiellement, le
dict
constructeur prend son premier argument et exécute le code similaire à ceci:dict
, vous devez fournir certains, la valeur pour chaque touche. Vous pouvez toujours revenir en arrière et changer la valeur plus tard.dict.fromkeys(myList, 0)
à la place...