我有一份字典清单:
[{'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”的字典,而不是只有一个字典中有总结的事件。原来的列表要大得多,我只是用了一个简短的版本来更好地解释自己。在
如果你不明白我的问题,尽管问,这样我就能更好地解释自己。在
在大多数上下文中(如在您的上下文中),如果按分组键对数据排序,^{} 效果最好,因为它只对相邻的元素进行分组:
使用生成器表达式而不是
map
-lambda
基本上是一个品味问题,但是,至少在python2中,通过不构建中间层list
来节省一些资源。在这应该行得通:(太迟了;)
相关问题 更多 >
编程相关推荐