gpt4 book ai didi

python - 根据组号制作新列表并添加分数

转载 作者:太空狗 更新时间:2023-10-29 23:56:39 25 4
gpt4 key购买 nike

如果在另一个列表中有一个列表,看起来像这样......

[['Harry',9,1],['Harry',17,1],['Jake',4,1], ['Dave',9,2],['Sam',17,2],['Sam',4,2]]

我怎样才能将中间元素加在一起,例如对于“Harry”,它显示为 ['Harry', 26] 并且 Python 也可以查看组号(第 3 个元素)并只输出获胜者(得分最高的是中间元素)。因此,对于每个组,需要有一个获胜者。所以最终输出显示:

[['Harry', 26],['Sam',21]]

这个问题不是重复的:它还有第三个元素,我对此很困惑

类似的问题给了我一个答案:

grouped_scores = {}
for name, score, group_number in players_info:
if name not in grouped_scores:
grouped_scores[name] = score
grouped_scores[group_number] = group_number
else:
grouped_scores[name] += score

但这只是将分数相加,并不会从每组中剔除获胜者。请帮忙。

我本来想做这样的事情,但我不确定到底该怎么做......

grouped_scores = {}
for name, score, group_number in players_info:
if name not in grouped_scores:
grouped_scores[name] = score
else:
grouped_scores[name] += score
for group in group_number:
if grouped_scores[group_number] = group_number:
[don't know what to do here]

最佳答案

解决方案:

使用itertools.groupbycollections.defaultdict:

l=[['Harry',9,1],['Harry',17,1],['Jake',4,1], ['Dave',9,2],['Sam',17,2],['Sam',4,2]]
from itertools import groupby
from collections import defaultdict
l2=[list(y) for x,y in groupby(l,key=lambda x: x[-1])]
l3=[]
for x in l2:
d=defaultdict(int)
for x,y,z in x:
d[x]+=y
l3.append(max(list(map(list,dict(d).items())),key=lambda x: x[-1]))

现在:

print(l3)

是:

[['Harry', 26], ['Sam', 21]]

说明:

前两行是导入模块。然后下一行使用 groupby 根据每个子列表的最后一个元素分成两组。然后下一行创建空列表。然后下一个循环遍历分组的循环。然后创建一个defaultdict。然后子循环将内容添加到 defaultdict。然后是最后一行来管理如何将该字典放入列表中。

关于python - 根据组号制作新列表并添加分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53295489/

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