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