gpt4 book ai didi

python - 字典列表 : aggregate value by grouping by inner dictionary key

转载 作者:行者123 更新时间:2023-11-30 21:50:48 24 4
gpt4 key购买 nike

我有这个签名:

def aggregate_by_player_id(input, playerid, fields):

我所说的“字段”是指在“输入”中按“playerID”进行分组的字段。

我这样调用该函数:

aggregate_by_player_id(input, 'player', ['stat1','stat3'])

输入如下所示:

[{'player': '1', 'stat1': '3', 'stat2': '4', 'stat3': '5'},
{'player': '1', 'stat1': '1', 'stat2': '4', 'stat3': '1'},
{'player': '2', 'stat1': '1', 'stat2': '2', 'stat3': '3'},
{'player': '2', 'stat1': '1', 'stat2': '2', 'stat3': '1'},
{'player': '3', 'stat1': '4', 'stat2': '1', 'stat3': '6'}]

我的输出结构是:

nested_dic = {value_of_playerid1: {'playerid': value_of_playerid1, 'stat1': value_of_stat1, 'stat2': value_of_stat2}, 
value_of_playerid2: {'playerid': value_of_playerid2, 'stat2': value_of_stat2, 'stat2': value_of_stat2},
value_of_playerid3: {'playerid': value_of_playerid3, 'stat3': value_of_stat3, 'stat3': value_of_stat3}}

因此输出应如下所示:

{'1': {'player': '1', 'stat1': 4, 'stat3': 6}, 
'2': {'player': '2', 'stat1': 2, 'stat3': 4},
'3': {'player': '3', 'stat1': 4, 'stat3': 6}}

最佳答案

我们可以使用itertools.groupby以便根据 playerid 进行分组,然后对各个字段的值求和。

from itertools import groupby
from operator import itemgetter

def aggregate_by_player_id(input_, playerid, fields):
player = itemgetter(playerid)
output = {}

for k, v in groupby(input_, key=player):
data = list(v)
stats = {playerid: k}

for field in fields:
stats[field] = sum(int(d.get(field, 0)) for d in data)
output[k] = stats
return output

data.sort(key=player) # data must be pre-sorted on grouping key
results = aggregate_by_player_id(data, 'player', ['stat1', 'stat3'])

{'1': {'player': '1', 'stat1': 4, 'stat3': 6},
'2': {'player': '2', 'stat1': 2, 'stat3': 4},
'3': {'player': '3', 'stat1': 4, 'stat3': 6}}

关于python - 字典列表 : aggregate value by grouping by inner dictionary key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60272503/

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