求字典中具有相同键的值的总和

2024-09-28 22:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份字典清单:

[{'Total Incidents': '1', 'CrimeTime': '19'}, 
 {'Total Incidents': '1', 'CrimeTime': '19'}, 
 {'Total Incidents': '1', 'CrimeTime': '19'}, 
 {'Total Incidents': '1', 'CrimeTime': '20'}, 
 {'Total Incidents': '1', 'CrimeTime': '20'},
 {'Total Incidents': '1', 'CrimeTime': '21'},
 {'Total Incidents': '1', 'CrimeTime': '21'}]

我需要将'Total Incidents'的值转换为int,并将它们相加,对于同一小时内发生的每个事件(分钟和秒无关紧要)。输出应该如下所示:

^{pr2}$

我用了这个方法:

 [{ 'CrimeTime':       g[0], 
    'Total Incidents': sum(map(lambda x: int(x['Total Incidents']), g[1])) } 
  for g in itertools.groupby(mydata, lambda x: x['CrimeTime']) ]

但不幸的是,有时它会重复“CrimeTime”,所以我得到了两个具有相同“CrimeTime”的字典,而不是只有一个字典中有总结的事件。原来的列表要大得多,我只是用了一个简短的版本来更好地解释自己。在

如果你不明白我的问题,尽管问,这样我就能更好地解释自己。在


Tags: 方法lambdainmapfor字典事件int
2条回答

在大多数上下文中(如在您的上下文中),如果按分组键对数据排序,^{}效果最好,因为它只对相邻的元素进行分组:

key = lambda x: x['CrimeTime']
[
    {'CrimeTime': k, 'Total Incidents': sum(int(x['Total Incidents']) for x in g)} 
    for k, g in itertools.groupby(sorted(mydata, key=key), key=key)
]

使用生成器表达式而不是map-lambda基本上是一个品味问题,但是,至少在python2中,通过不构建中间层list来节省一些资源。在

这应该行得通:(太迟了;)

 [
   {'CrimeTime': g[0], 'Total Incidents': sum(map(lambda x: int(x['Total Incidents']), g[1]))} 
      for g in 
        itertools.groupby(
          sorted(data,key=lambda x:x.values()[0]), lambda x: x['CrimeTime'])
]

相关问题 更多 >