5

「Pythonクックブック」を読んで、レシピ「2つの辞書の交点を見つける」の著者がそのようなワンライナーの使用を推奨しているものを確認しました。

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 で。これは、2 つの辞書の共通キーをセットとして返します。

これは、メソッドを使用して 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 に答える