Python 3.7 で、2 つの辞書のキーの共通部分を計算したいと考えています。.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 つが存在します。