【问题标题】:Sum the values of a list of dictionaries对字典列表的值求和
【发布时间】:2016-05-23 15:39:08
【问题描述】:

我有这个字典列表:

[{'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}, {'Total Incidents': '1', 'CrimeDate': '05/14/2016'}]

我需要将 'Total Incidents' 的 de 值转换为 int,并将它们相加。此外,如果日期相等,该函数将获取所有日期并将它们合二为一。例如,输出应该是这样的:

[{'Total Incidents': 9, 'CrimeDate':'05/14/2016'}]

这是我迄今为止尝试过的:

dictf = reduce(lambda x, y: dict((k, v + y[k]) for k, v in x.iteritems()), dict1)

dict1 是一个包含第一个字典的变量。 但是输出不是我想要的,它给了我这个:

{'Total Incidents': '111111111', 'CrimeDate': '05/14/201605/14/201605/14/201605/14/201605/14/201605/14/201605/14/201605/14/201605/14/2016'}

提前致谢

【问题讨论】:

  • 如果日期不相等?
  • 假设有两个日期而不是一个,只有当它们发生的日期相同时才会对事件进行求和,因此输出将有一个包含两个字典而不是一个的列表。跨度>
  • 那么,到目前为止你尝试过什么?
  • 还有……你试过了吗?我们很乐意帮助您解决您自己尝试此操作时遇到的问题,但我们不是代码编写服务。
  • 对不起,我已经尝试更新了我的问题。

标签: python list python-2.7 dictionary


【解决方案1】:

使用itertools.groupby

>>> [{'CrimeDate': g[0], 'Total Incidents': sum(map(lambda x: int(x['Total Incidents']), g[1]))} for g in itertools.groupby(d, lambda x: x['CrimeDate'])]
[{'Total Incidents': 9, 'CrimeDate': '05/14/2016'}]

【讨论】:

  • 这正是我所需要的,谢谢。 :)
猜你喜欢
  • 2023-03-31
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多