Python 对字典中具有相同键的值求和
我有以下词典列表:Python 对字典中具有相同键的值求和,python,list,python-2.7,dictionary,Python,List,Python 2.7,Dictionary,我有以下词典列表: [{'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'}, {'Tot
[{'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,并将它们相加,对于在同一小时内发生的每个事件,分钟和秒是不相关的。输出应如下所示:
[{'Total Incidents': 3, 'CrimeTime': '19'},
{'Total Incidents': 2, 'CrimeTime': '20'},
{'Total Incidents': 2, 'CrimeTime': '21'}]
我使用了这种方法:
[{ '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”的词典,而不是只有一本具有总结事件的词典。原来的列表要大得多,我只是用了一个简短的版本来更好地解释自己
如果您不理解我的问题,请随时提问,这样我可以更好地解释自己。在大多数情况下,如在您的情况下,如果数据按分组键排序,效果最好,因为它只对相邻元素进行分组:
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主要是一个趣味问题,但是,至少在Python 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)
]
使用生成器表达式而不是映射lambda主要是一个趣味问题,但是,至少在Python 2中,通过不构建中间列表,可以节省一些资源。这应该是可行的:太晚了
[
{'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'])
]
这应该行得通:太晚了
[
{'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'])
]
要使groupby正常工作,mydata应按分组所用的键进行排序!所以我需要对mydata进行排序?是的,我将发布一个示例。为了groupby正常工作,mydata应该按照分组所用的键进行排序!所以我需要对我的数据进行排序?是的,我将发布一个示例。