我有一个字典列表,希望设计一个函数来输出一个新的字典,其中包含该列表中所有字典中每个唯一键的总和。
对于给定的列表:
[
{
'apples': 1,
'oranges': 1,
'grapes': 2
},
{
'apples': 3,
'oranges': 5,
'grapes': 8
},
{
'apples': 13,
'oranges': 21,
'grapes': 34
}
]
到目前为止都很好,这可以用计数器完成:
def sumDicts(listToProcess):
c = Counter()
for entry in listToProcess:
c.update(entry)
return (dict(c))
哪一个是正确的返回结果:
{'apples': 17, 'grapes': 44, 'oranges': 27}
问题出现在我的列表中的字典开始包含嵌套字典时:
[
{
'fruits': {
'apples': 1,
'oranges': 1,
'grapes': 2
},
'vegetables': {
'carrots': 6,
'beans': 3,
'peas': 2
},
'grains': 4,
'meats': 1
},
{
'fruits': {
'apples': 3,
'oranges': 5,
'grapes': 8
},
'vegetables': {
'carrots': 7,
'beans': 4,
'peas': 3
},
'grains': 3,
'meats': 2
},
{
'fruits': {
'apples': 13,
'oranges': 21,
'grapes': 34
},
'vegetables': {
'carrots': 8,
'beans': 5,
'peas': 4
},
'grains': 2,
'meats': 3
},
]
现在同样的函数会因为计数器不能添加两个字典而产生TypeError错误。
期望的结果是:
{
'fruits': {
'apples': 17,
'oranges': 27,
'grapes': 44
},
'vegetables': {
'carrots': 21,
'beans': 12,
'peas': 9
},
'grains': 9,
'meats': 6
}
有没有什么办法可以以一种相对高效、Pythonic和具有普适性的方式实现这个目标呢?
for subd in data: print(merge(d, subd))
时,我得到了 3 x None。 - Mykola Zotkod
。 - cs95