gpt4 book ai didi

python - 对字典中具有相同键的值求和

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:36 27 4
gpt4 key购买 nike

我有这个字典列表:

[{'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”的词典,而不是只有一个具有总事件的词典。原始列表要大得多,我只是使用了一个简短的版本来更好地解释自己。

如果您不明白我的问题,请随时提问,以便我更好地解释自己。

最佳答案

在大多数情况下(如您的情况),itertools.groupby如果数据按分组键排序,效果最好,因为它只对相邻元素进行分组:

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 中,通过不构建中间 list.

关于python - 对字典中具有相同键的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436249/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com