TypeError:|:' list'不支持的操作数类型和'列出'

时间:2014-04-10 07:26:58

标签: python dictionary set list-comprehension

在Python中,我想编写一个列表推导来迭代2个字典的键的并集。这是一个玩具示例:

A = {"bruno":1, "abe":2}.keys()
B = {"abe":5, "carlton":10}.keys()

>>>[ k for k in A | B ]

我收到了错误:

Traceback (most recent call last)
<ipython-input-221-ed92ac3be973> in <module>()
      2 B= {"abe":5, "carlton":10}.keys()
      3 
----> 4 [ k for k in A|B]

TypeError: unsupported operand type(s) for |: 'list' and 'list'

理解对于1个词典来说效果很好。例如:

>>>[ k for k in A]
['bruno', 'abe']

不确定错误的位置。我在教科书中跟随一个例子,根据这本书,这种类型的并集和交集运算符应该可以正常工作。请让我知道你的想法。谢谢。

1 个答案:

答案 0 :(得分:8)

在Python 2中,dict.keys()是一个列表,而不是dictionary view。请改用dict.viewkeys()

A = {"bruno":1, "abe":2}.viewkeys()
B = {"abe":5, "carlton":10}.viewkeys()

[k for k in A | B]

您的示例将在Python 3 中运行,其中.keys() method已更改为默认返回字典视图。

演示:

>>> A = {"bruno":1, "abe":2}.viewkeys()
>>> B = {"abe":5, "carlton":10}.viewkeys()
>>> [k for k in A | B]
['carlton', 'bruno', 'abe']

听起来好像你的教科书假设你正在使用Python 3.切换教科书,或使用Python 3来运行这些示例,在你获得更多Python 2和3。

对于记录,字典视图支持使用|^-&运算符对右侧任何迭代的集合操作;所以以下工作也是如此:

A_dict = {"bruno":1, "abe":2}
B_dict = {"abe":5, "carlton":10}

[k for k in A_dict.viewkeys() | B_dict]