「Pythonクックブック」を読んで、レシピ「2つの辞書の交点を見つける」の著者がそのようなワンライナーの使用を推奨しているものを確認しました。
filter(another_dict.has_key, some_dict.keys())
しかし、Python 3 辞書には has_key() メソッドがないため、提案されたコードをどのように変更すればよいでしょうか? 内部 __ in__() メソッドまたはこのようなものがあると思います。
何かアイデアはありますか?
「Pythonクックブック」を読んで、レシピ「2つの辞書の交点を見つける」の著者がそのようなワンライナーの使用を推奨しているものを確認しました。
filter(another_dict.has_key, some_dict.keys())
しかし、Python 3 辞書には has_key() メソッドがないため、提案されたコードをどのように変更すればよいでしょうか? 内部 __ in__() メソッドまたはこのようなものがあると思います。
何かアイデアはありますか?
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
。