Python字典创建错误

5 投票
1 回答
12236 浏览
提问于 2025-04-15 15:19

我正在尝试从一个存储的列表创建一个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的方法可以,而第二种方法却不行呢?myListmyList2之间有什么区别吗?

编辑

我又检查了一下,myList2实际上有两个以上的元素。更新了第二个例子以反映这一点。

1 个回答

13

你这样做是不对的。

dict()这个构造函数并不是接收一堆项目(更不是接收一个包含单个项目的列表),它需要的是一个包含两个元素的可迭代对象。所以如果你把代码改成这样:

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

撰写回答