5

我正在尝试从存储的列表中创建 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 有效,而第二种方法无效?myList和有区别myList2吗?

编辑

再次检查myList2实际上有两个以上的元素。更新了第二个示例以反映这一点。

4

1 回答 1

13

你这样做是错的。

构造函数不采用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'}

是因为它将其解释为包含一个元素的列表,该列表包含两个元素。

本质上,dict构造函数接受它的第一个参数并执行类似于以下的代码:

for key, value in myList:
    print key, "=", value
于 2009-10-23T19:50:10.870 回答