1

这是我的字典列表:

dict_list=[{'red':3, 'orange':4}, {'blue':1, 'red':2},
   {'brown':4, 'orange':7}, {'blue':4, 'pink':10}]

这是我的desired outcome

[{'red':5, 'orange':11, 'blue':5, 'brown':4, 'pink':10}]

我尝试使用 sum 但收到错误消息,更新似乎不适合这里。

 update_dict={}
 for x in dict_list:
     for a in x.items():
         update_dict+= x[a]

有什么建议么?谢谢。

4

2 回答 2

3

defaultdict是你的朋友。

from collections import defaultdict

d = defaultdict(int)

for subdict in dict_list:
    for k,v in subdict.items():
        d[k] += int(v)

Python 3 语法。这int(v)是必要的,因为您的字典中混合了字符串和 int 值。

要获得所需的输出:

d
Out[16]: defaultdict(<class 'int'>, {'orange': 11, 'blue': 5, 'pink': 10, 'red': 5, 'brown': 4})

[dict(d)]
Out[17]: [{'blue': 5, 'brown': 4, 'orange': 11, 'pink': 10, 'red': 5}]
于 2013-10-12T03:39:18.990 回答
0

dict_list让我们通过将您的转换为元组列表来简化这一点。itertools.chain擅长这种事情。

from itertools import chain

dict_list=[{'red':'3', 'orange':4}, {'blue':'1', 'red':2},
  {'brown':'4', 'orange':7}, {'blue':'4', 'pink':10}]

def dict_sum_maintain_types(dl):
  pairs = list(chain.from_iterable(i.items() for i in dl))

  # Initialize the result dict. 
  result = dict.fromkeys(chain(*dl), 0)

  # Sum the values as integers.
  for k, v in pairs:
    result[k] += int(v)

  # Use the type of the original values as a function to cast the new values
  # back to their original type.
  return [dict((k, type(dict(pairs)[k])(v)) for k, v in result.items())] 

>>> dict_sum_maintain_types(dict_list)
[{'orange': 11, 'blue': '5', 'pink': 10, 'red': 5, 'brown': '4'}]
于 2013-10-12T03:53:06.220 回答