我试图建立一个功能
def adding_3dict(d1,d2,d3)
该函数获得3个词典d1,d2,d3, 从他们创建一个词典D. 这样如果在d1,d2,d3的多个字典中找到一个键, 它在D中的值将是所有词典中所有值的元组。 来自d1,d2,d3的其余对被原样复制到D. 该函数返回新字典D.
示例:
d1={1:'a',3:'d',5:'e'}
d2={1:'b',3:(11,22),7:'f',4:'q'}
d3={2:'c',3:'x',4:'t',8:'g'}
输出字典是:
d = {1: ('a', 'b'), 2: 'c', 3: ('d', (11, 22), 'x'), 4: ('q', 't'), 5: 'e', 7: 'f', 8: 'g'}
我试过了:
import collections
d1={}
d2={}
d3={}
def adding_3dict(d1,d2,d3):
d={}
d=dict(d1.items() + d2.items()+ d3.items() )
return d
我试过了,我的输出是:
>>>
>>> adding_3dict( {1:'a',3:'d',5:'e'}, {1:'b',3:(11,22),7:'f',4:'q'} , {2:'c',3:'x',4:'t',8:'g'} )
{1: 'b', 2: 'c', 3: 'x', 4: 't', 5: 'e', 7: 'f', 8: 'g'} #the output
>>>
如何更改
的输出{1: 'b', 2: 'c', 3: 'x', 4: 't', 5: 'e', 7: 'f', 8: 'g'}
到
{1: ('a', 'b'), 2: 'c', 3: ('d', (11, 22), 'x'), 4: ('q', 't'), 5: 'e', 7: 'f', 8: 'g'}
答案 0 :(得分:0)
这是一个可以接受任意数量字典的解决方案:
from itertools import chain
def custom_dictmerge(*args):
result = {}
keys = set(chain(*(d.keys() for d in args)))
for k in keys:
result[k] = tuple(d[k] for d in args if k in d)
if len(result[k]) == 1:
result[k] = result[k][0]
return result
致电custom_dictmerge(d1, d2, d3)
。
答案 1 :(得分:0)
使用defaultdict
中的collections
可以将所有值附加到列表中。所以你只需要解析每个字典的键。
from collections import defaultdict
def mergedict(list_of_dicts):
d = defaultdict(list)
for di in list_of_dicts:
for k, v in di.items():
d[k].append(v)
return d
如果你真的需要元组和单个值,那么你总是可以将列表转换为你想要的任何类型。
def convert_to_tuples(d):
""" converts values inplace """
for k, v in d.items():
if len(v) > 1:
d[k] = tuple(v)
else:
d[k] = v[0]
return d