查找列表元素的平均值,如果使用 Python 满足条件?

F16*_*con 0 python math list python-3.x

我有一个具有以下格式的列表:

mylist = ["Joe, 100%", "Joe, 80%", "Joe, 90%", "Sally, 95%", "Sally, 80%", "Jimmy, 90%", ...]
Run Code Online (Sandbox Code Playgroud)

我想要做的是,首先计算每个名字出现的次数。如果某个名称出现 2 次或更多次,请附加该名称以及平均百分比。所以,我试图获得以下输出:

newlist = ["Joe, 90%", "Sally, 87.5%"]
Run Code Online (Sandbox Code Playgroud)

为了尝试这个,我mylist.split(", ")只得到了名字,并用来Counter()查找名字出现的次数。然后,如果名称出现 2 次或更多次,我使用一个简单的if >= 2语句将名称附加到后面newlist

然而,尽管尝试了许多不同的事情,但我无法弄清楚如何在最终列表中使用名称获取百分比。我也不确定如何在谷歌上表达我的问题,所以我找不到任何帮助。有谁知道如何做到这一点?如果此问题重复,请告诉我(并提供链接以便我学习),我可以删除此问题。谢谢!

abh*_*ilb 6

你可以试试这个:

from collections import defaultdict
counts = defaultdict(int)
percents = defaultdict(int)

for item in mylist:
    name, percent = item.split(',')
    percent = int(percent.lstrip().rstrip('%'))
    percents[name]+=percent
    counts[name]+=1

result = []
for k,v in counts.items():
    if v > 1:
        result.append(f"{k}, {percents[k]/v}%")
print(result)
Run Code Online (Sandbox Code Playgroud)

输出

['Joe, 90.0%', 'Sally, 87.5%']