没有用于Python 3字典的has_key()方法

Ale*_*yev 5 python python-3.x

我读了"Python Cookbook",看看在"寻找两个字典的交叉点"的作品中,作者建议使用这样的单行:

filter(another_dict.has_key, some_dict.keys())
Run Code Online (Sandbox Code Playgroud)

但是由于Python 3字典没有has_key()方法,我应该如何修改建议的代码?我想在__()方法中可能有一些内部__或类似的东西.

请问有什么想法吗?

Sve*_*ach 17

Python 3具有字典键视图,而是一个更强大的概念.您的代码可以写成

some_dict.keys() & another_dict.keys()
Run Code Online (Sandbox Code Playgroud)

在Python 3.x. 这将两个字典的公共键作为一组返回.

这也可以在Python 2.7中使用该方法dict.viewkeys().

作为原始代码的更接近匹配,您还可以使用列表理解:

[key for key in some_dict if key in another_dict]
Run Code Online (Sandbox Code Playgroud)

原始代码的更紧密匹配将是使用dict.__contains__(),这是对应于in运算符的魔术方法:

filter(another_dict.__contains__, some_dict.keys())
Run Code Online (Sandbox Code Playgroud)

但请不要使用此代码.我建议用第一个版本,这是唯一一个突出的对称性会some_dictanother_dict.

  • 没有.交叉口操作是可交换的. (2认同)
  • `a.keys()&b.keys()`和`b.keys()&a.keys()`之间有一个细微的区别 - 如果较短的一个出现在CPython 3.2中,性能会更好(at至少对我而言,对于足够大的阵列,今天.)纯粹是一个实现细节. (2认同)