gpt4 book ai didi

python - 如何找到元组列表中每个相似条目的平均值?

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:15 26 4
gpt4 key购买 nike

我有这个元组列表

[('Jem', 10), ('Sam', 10), ('Sam', 2), ('Jem', 9), ('Jem', 10)]

我如何找到与每个名称耦合的数字的平均值,即与 Jem 存储在一个元组中的所有数字的平均值,然后输出它们?在此示例中,输出将是:

Jem 9.66666666667
Sam 6

最佳答案

有几种方法可以做到这一点。一种很简单,一种很漂亮。

简单:

使用字典!很容易构建一个 for 循环,遍历您的元组并将第二个元素附加到以第一个元素为键的字典中。

d = {}
tuples = [('Jem', 10), ('Sam', 10), ('Sam', 2), ('Jem', 9), ('Jem', 10)]
for tuple in tuples:
key,val = tuple
d.setdefault(key, []).append(val)

一旦它在字典中,您就可以:

for name, values in d.items():
print("{name} {avg}".format(name=name, avg=sum(values)/len(values)))

漂亮:

使用 itertools.groupby。这仅在您的数据按您要分组的键排序时才有效(在这种情况下,t[0] 用于 tuples 中的每个 t >) 所以在这种情况下它并不理想,但它是突出功能的好方法。

from itertools import groupby

tuples = [('Jem', 10), ('Sam', 10), ('Sam', 2), ('Jem', 9), ('Jem', 10)]
tuples.sort(key=lambda tup: tup[0])
# tuples is now [('Jem', 10), ('Jem', 9), ('Jem', 10), ('Sam', 10), ('Sam', 2)]

groups = groupby(tuples, lambda tup: tup[0])

这构建了一个看起来有点像的结构:

[('Jem', [('Jem', 10), ('Jem', 9), ('Jem', 10)]),
('Sam', [('Sam', 10), ('Sam', 2)])]

我们可以用它来建立我们的名字和平均值:

for groupname, grouptuples in groups:
values = [t[1] for t in groupvalues]
print("{name} {avg}".format(name=groupname, avg=sum(values)/len(values)))

关于python - 如何找到元组列表中每个相似条目的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28566041/

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