假设我有两本词典:
a = {'a': 1, 'b': 2, 'c': 3}
b = {'b': 2, 'c': 3, 'd': 4, 'e': 5}
找到两者之间的非共同项目的最pythonic方式是什么,以便a
和b
得到:
{'a': 1, 'd': 4, 'e': 5}
我原以为:
{key: b[key] for key in b if not a.get(key)}
但这只是一种方式(b项不在a中)和
a_only = {key: a[key] for key in a if not b.get(key)}.items()
b_only = {key: b[key] for key in b if not a.get(key)}.items()
dict(a_only + b_only)
接缝非常凌乱。还有其他解决方案吗?
答案 0 :(得分:11)
>>> dict(set(a.iteritems()) ^ set(b.iteritems()))
{'a': 1, 'e': 5, 'd': 4}
答案 1 :(得分:3)
尝试使用set()
的{{3}}:
out = {}
for key in set(a.keys()) ^ set(b.keys()):
out[key] = a.get(key, b.get(key))
答案 2 :(得分:2)
diff = {key: a[key] for key in a if key not in b}
diff.update((key,b[key]) for key in b if key not in a)
只是你所拥有的更便宜的版本。
答案 3 :(得分:0)
>>> a = {'a': 1, 'b': 2, 'c': 3}
>>> b = {'b': 2, 'c': 3, 'd': 4, 'e': 5}
>>> keys = set(a.keys()).symmetric_difference(set(b.keys()))
>>> result = {}
>>> for k in keys: result[k] = a.get(k, b.get(k))
...
>>> result
{'a': 1, 'e': 5, 'd': 4}
这是否比你的版本更糟糕是有争议的,但至少它不会重新实现symmetric_difference。