dict.keys
, dict.items
で取得できる辞書ビューオブジェクトは集合演算をサポートします(ただしitems
は値がすべてhashableという条件付き。list
などが値にある場合は不可能です)。
4. 組み込み型 — Python 3.6.5 ドキュメント | 4.10.1. 辞書ビューオブジェクト
よって、次のように書けます。
python
1>>> s1 = {"aaa":"http://aaa","bbb":"http://bbb","ccc":"http://ccc","ddd":"http://ddd"}
2>>> s2 = {"eee":"http://eee","aaa":"http://aaa","bbb":"http://bbb","fff":"http://fff"}
3>>> s2.items() - s1.items() # ちょっと残念なことにtupleのsetで返る
4{('eee', 'http://eee'), ('fff', 'http://fff')}
5>>> dict(s2.items() - s1.items()) # このようにdictに戻す
6{'eee': 'http://eee', 'fff': 'http://fff'}
値がunhashableな場合
python
1>>> s1 = {"aaa":["http://aaa"],"bbb":["http://bbb"],"ccc":["http://ccc"],"ddd":["http://ddd"]}
2>>> s2 = {"eee":["http://eee"],"aaa":["http://aaa"],"bbb":["http://bbb"],"fff":["http://fff"]}
3>>> dict(s2.items() - s1.items()) # 同じようには出来ない
4Traceback (most recent call last):
5 File "<stdin>", line 1, in <module>
6TypeError: unhashable type: 'list'
7>>> {k:s2[k] for k in s2.keys() - s1.keys()} # keysで集合演算してから辞書内包表記で辞書を作る
8{'eee': ['http://eee'], 'fff': ['http://fff']}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/27 15:35
2019/01/27 15:45 編集
2019/02/04 07:46