通过键合并两个Python字典的值
我想通过它们的键合并两个字典的值。例子:
d1 = {'a':1, 'b':2, 'c':3}
d2 = {'a':2, 'b':[2,3], 'd':3}
所需的输出:
{'a': [1, 2], 'b': [2, 2, 3], 'c': [3], 'd': [3]}
到目前为止我所拥有的是
d12 = {}
for d in (d1, d2):
for k,v in d.items():
d12.setdefault(k, []).append(v)
产生
d12 = {'a': [1, 2], 'b': [2, [2, 3]], 'c': [3], 'd': [3]}
不想要的输出。
我在 SO 上搜索了一下,发现这篇文章回答了我的问题,前提是它没有吐TypeError: can only concatenate tuple (not "int") to tuple.
回答
问题是您的值有时int是 s,有时list是 s。你必须检查的数据类型,要么append或extend相应:
for k, v in d.items():
if isinstance(v, list):
d12.setdefault(k, []).extend(v)
else:
d12.setdefault(k, []).append(v)