【问题标题】:Python dictionary creation errorPython字典创建错误
【发布时间】:2009-10-23 19:42:16
【问题描述】:

我正在尝试从存储的列表中创建 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实际上有两个以上的元素。更新了第二个示例以反映这一点。

【问题讨论】:

  • "myList 和 myList2 有区别吗?" myList == myList2 说什么?这两种方法都适用于 Python 2.5。
  • 我在 2.5.2 或 3.1.1 中都没有看到这个错误 - 确定某处没有错字吗?这些列表应该相同。
  • 他们都为我工作。我猜在第二个示例中,您实际上并没有在dict([mylist2]) 中输入方括号。你确定不是dict(mylist2)写的吗?
  • 正如其他人所说,您发布的代码应该可以工作。但是你填充myList 并在dict() 构造函数中使用它的方式意味着你用它做错了,你得到的错误支持了这个含义。最可能的问题是myList2 中包含两个以上的元素,或者当您将myList2 传递给dict() 时,您没有将它包装在另一个可迭代对象中。如果您在此处使用 2 元组而不是列表,则可以解决其中任何一个问题,因为这是表示键值对的更好结构。
  • 啊,是的,正如我所怀疑的,您使用myList2 作为通用列表。这是不正确的——当你使用它时,它需要恰好有两个元素(一个键和一个对应的值)。

标签: python python-2.5


【解决方案1】:

你做错了。

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

【讨论】:

  • 感谢我的需要,现在我意识到如果我有一个键列表,我可以使用以下命令创建字典:myDict = dict(zip(myList,zeros(len(myList))))。如果我还没有这些值。
  • @Azim:是的,这是一个好方法。关键是,当您创建dict 时,您需要为每个键提供一些 值。您以后可以随时返回并更改该值。
猜你喜欢
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2019-08-07
  • 2016-11-20
  • 2018-02-01
  • 2021-06-25
  • 2023-03-15
相关资源
最近更新 更多