home changes contents help options

123:2つのハッシュの両方にあるキー/一方にしかないキーを見つける

Ruby のハッシュの役割をする Python の型は 辞書 です。

辞書のキーを比較するには、まずキーを set にまとめるとよいでしょう。辞書のキーは keys, iterkeys メソッドらで取り出せますが、辞書をイテレータとして用いても取り出せます。 set, frozenset 型のコンストラクタはイテレータを受け付けるので、単に辞書を渡すだけでキーの集合を作ることができます。

両方にあるキーを見つける

キーの集合同士を & で演算します。もしくは intersection メソッドを用います。

>>> dict1 = {'a': 1, 'b': 2}
>>> dict2 = {'a': 3, 'c': 4}
>>> set(dict1) & set(dict2)
set(['a'])
>>>
>>> set(dict1).intersection(set(dict2))
set(['a'])
>>> set(dict1).intersection(dict2) # メソッド版の引数は set でなくてもよい、 set に直されてから演算される
set(['a'])

一方にしかないキーを見つける

キーの集合同士を ^ で演算します。もしくは symmetric_difference メソッドを用います。

>>> dict1 = {'a': 1, 'b': 2}
>>> dict2 = {'a': 3, 'c': 4}
>>> set(dict1) ^ set(dict2)
set(['c', 'b'])
>>>
>>> set(dict1).symmetric_difference(dict2)
set(['c', 'b'])