在 Python 3.7 中,我想计算两个字典键的交集。为此,我想.intersection()
在他们的 上调用该方法keys()
,但是它不起作用。
.keys() 产生一个类似集合的对象,但是大多数集合方法都不能处理它。然而,有效的是类集合对象的极其未知的按位运算符重载,例如&
.
m = {'a':1, 'b':2}
n = {'b':3, 'c':4}
m.keys().intersection(n.keys()) # Pythonic, but doesn't work
m.keys() & n.keys() # works but not readable
set(m.keys()).intersection(set(n.keys())) # works, readable, but too verbose
我发现&
类似集合的对象上的重载极少使用,并且大多数程序员都不知道。.intersection()
类似or的方法名称.union()
是自记录的,并且根据这个定义肯定更 Pythonic。
那为什么不支持呢?甚至文档也列出了别名之类的&
和.intersection()
方法,更不用说仅&
在类似集合的对象上受支持。
注意:出于某种原因,在 IPython 中,自动完成列表.isdisjoin()
作为一种方法在dict.keys()
. 在 17 种方法中,存在 1 种。