python - 类型错误 : unsupported operand type(s) for |: 'list' and 'list'

标签 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']

不知道哪里出错了。我正在按照教科书中的示例进行操作,根据该书,这种类型的并集和交集运算符应该可以正常工作。请让我知道你的想法。谢谢。

最佳答案

在 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已更改为默认返回字典 View 。

演示:

>>> 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 和 Python 3 之间的差异有更多的经验之前,不要尝试混合两者3.

根据记录,字典 View 支持使用 |^-& 进行集合操作针对右侧任何可迭代对象的运算符;所以以下也适用:

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

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

关于python - 类型错误 : unsupported operand type(s) for |: 'list' and 'list' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981392/

相关文章:

python - Airflow :当 on_success_callback 执行带参数的函数时

python - 从格式化字符串打印 unicode

python - Plotly:如何调整轴标签和绘图区域之间的空间?

python - 使用 argparse,将任意字符串作为要在脚本中使用的参数传递

c# - 在 map 内创建障碍

python - 检查字典 : exceptions or set? 中的成员资格

java - 设置比较器不是通用的;它不能用参数参数化

java - Set.contains() 如何决定它是否是一个子集?

javascript - 如何在 JSDoc 中记录字典?

c++ - 结构体可以与哈希值或字典进行比较吗