有两个词典
x={1:['a','b','c']}
y={1:['d','e','f'],2:['g']}
我想要另一个字典z,它是x和y的合并之一,以便
z = {1:['a','b','c','d','e','f'],2:['g']}
是否可以执行此操作? 我尝试了更新操作
x.update(y)
但它给了我以下结果
z= {1:['d','e','f'],2:['g']}
答案 0 :(得分:3)
你可以这样做:
final = {}
dicts = [x,y]
for D in dicts:
for key, value in D:
final[key] = final.get(key,[]).extend(value)
如果该密钥存在, final.get(key,[])
将获得final
的值,否则它将是一个空列表。 .extend(value)
会使用D
中的相应值(在此情况下为x
或y
)扩展该列表,无论是否为空。
答案 1 :(得分:1)
for k, v in x.items():
if k in y.keys():
y[k] += v
else:
y[k] = v
循环遍历字典获取键和值,检查键是否已存在,在这种情况下追加,否则添加带键值的新键。如果您的值是不具有列表的混合数据类型,那么它将无法工作。
x={1:['a','b','c'], 3:['y']}
.. y={1:['d','e','f'],2:['g']}
..
..
.. for k, v in x.items():
.. if k in y.keys():
.. y[k] += v
.. else:
.. y[k] = v
..
.. print y
{1: ['d', 'e', 'f', 'a', 'b', 'c'], 2: ['g'], 3: ['y']}
答案 2 :(得分:1)
这对我有用:
d1={'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]}
d2 = {'a':[10,11,12], 'b':[13,14,15], 'c':[16,17,18]}
d3 = {}
for k in d1.keys():
d3.update( {k : []} )
for i in d1[k]:
d3[k].append(i)
for j in d2[k]:
d3[k].append(j)
print(d3)
我知道这是一种回旋方式,但是当字典值为ndarrays时,其他方法无效。
答案 3 :(得分:0)
>>> x={1:['a','b','c']}
>>> y={1:['d','e','f'],2:['g']}
>>> from collections import Counter
>>> Counter(x) + Counter(y)
Counter({2: ['g'], 1: ['a', 'b', 'c', 'd', 'e', 'f']})
如果需要的结果是dict。您可以使用以下内容:
z = dict(Counter(x) + Counter(y))
答案 4 :(得分:0)
单行解决方案:
{ key:x.get(key,[])+y.get(key,[]) for key in set(list(x.keys())+list(y.keys())) }
示例1:
x={1:['a','b','c']}
y={1:['d','e','f'],2:['g']}
{ key:x.get(key,[])+y.get(key,[]) for key in set(list(x.keys())+list(y.keys())) }
输出:
{1:['a','b','c','d','e','f'],2:['g']}
示例2:
one = {'a': [1, 2], 'c': [5, 6], 'b': [3, 4]}
two = {'a': [2.4, 3.4], 'c': [5.6, 7.6], 'd': [3.5, 4.5]}
{ key:one.get(key,[])+two.get(key,[]) for key in set(list(one.keys())+list(two.keys())) }
输出:
{'a':[1,2,2.4,3.4],'b':[3,4],'c':[5,6,5.6,7.6],'d':[3.5, 4.5]}
答案 5 :(得分:0)
以下是适用于任意数量词典的Python 3解决方案:
def dict_merge(*dicts_list):
result = {}
for d in dicts_list:
for k, v in d.items():
result.setdefault(k, []).append(v)
return result
请注意,此解决方案可能会创建具有重复值的列表。如果需要唯一值,请使用set()
:
def dict_merge(*dicts_list):
result = {}
for d in dicts_list:
for k, v in d.items():
result.setdefault(k, set()).add(v)
return result