5

我阅读了“Python Cookbook”并查看了“查找两个字典的交集”的作者推荐使用这样的单行代码的方法:

filter(another_dict.has_key, some_dict.keys())

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

请问有什么想法吗?

4

1 回答 1

17

Python 3 有字典键视图,这是一个更强大的概念。你的代码可以写成

some_dict.keys() & another_dict.keys()

在 Python 3.x 中。这会将两个字典的公共键作为一个集合返回。

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

作为原始代码的更紧密匹配,您还可以使用列表推导:

[key for key in some_dict if key in another_dict]

更接近原始代码的匹配是使用dict.__contains__(),这是与运算符对应的魔术方法in

filter(another_dict.__contains__, some_dict.keys())

但请不要使用此代码。我建议使用第一个版本,它是唯一突出 和 之间对称性的some_dict版本another_dict

于 2012-06-15T13:32:48.500 回答