質問

保存されたリストから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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top