質問
保存されたリストからPython辞書を作成しようとしています。この最初の方法は動作します
>>> myList = []
>>> myList.append('Prop1')
>>> myList.append('Prop2')
>>> myDict = dict([myList])
ただし、次の方法は機能しません
>>> myList2 = ['Prop1','Prop2','Prop3','Prop4']
>>> myDict2 = dict([myList2])
ValueError: dictionary update sequence element #0 has length 3; 2 is required
では、なぜappendを使用する最初の方法は機能するのに、2番目の方法は機能しないのか疑問に思っています。 myList
と myList2
に違いはありますか?
編集
再度チェック myList2
には実際には3つ以上の要素があります。これを反映するために2番目の例を更新しました。
解決
あなたは間違っています。
dict()
コンストラクターはアイテムのリストを取りません(アイテムの単一のリストを含むリストではなく)、2要素のイテラブルのイテラブルを取ります。コードを次のように変更した場合:
myList = []
myList.append(["mykey1", "myvalue1"])
myList.append(["mykey2", "myvalue2"])
myDict = dict(myList)
その後、期待どおりの結果が得られます。
>>> myDict
{'mykey2': 'myvalue2', 'mykey1': 'myvalue1'}
これが機能する理由:
myDict = dict([['prop1', 'prop2']])
{'prop1': 'prop2'}
2つの要素を含むリストである1つの要素を含むリストとして解釈するためです。
本質的に、 dict
コンストラクターは最初の引数を取り、次のようなコードを実行します:
for key, value in myList:
print key, "=", value
所属していません StackOverflow