Skip to main content
 首页 » 编程设计

python之如果某个键相同,则获取所有值的平均值

2025年05月04日23bonelee

所以我有这个字典列表:

l = [{'COUNTRY': 'UK', 'CREDITS': '54'}, {'COUNTRY': 'PT', 'CREDITS': '100'}, {'COUNTRY': 'FR', 'CREDITS': '20'}, {'COUNTRY': 'UK', 'CREDITS': '30'}, {'COUNTRY': 'UK', 'CREDITS': '15'}, {'COUNTRY': 'PT', 'CREDITS': '35'}, {'COUNTRY': 'FR', 'CREDITS': '30'}] 

我需要获得每个国家/地区的学分的平均值。输出应该是这样的:

l2 = {'UK': '102', 'PT': '67.5', 'FR': '25'} 

有什么简单易行的方法可以实现吗?

请您参考如下方法:

我会首先创建一个 defaultdict 来收集“COUNTRY”键下整数列表中的值。

然后我将创建一个字典理解,执行平均值:

l = [{'COUNTRY': 'UK', 'CREDITS': '54'}, {'COUNTRY': 'PT', 'CREDITS': '100'}, {'COUNTRY': 'FR', 'CREDITS': '20'}, {'COUNTRY': 'UK', 'CREDITS': '30'}, {'COUNTRY': 'UK', 'CREDITS': '15'}, 
 {'COUNTRY': 'PT', 'CREDITS': '35'}, {'COUNTRY': 'FR', 'CREDITS': '30'}] 
 
import collections 
 
d = collections.defaultdict(list) 
for s in l: 
    d[s["COUNTRY"]].append(int(s["CREDITS"])) 
 
result = {k:sum(v)/len(v) for k,v in d.items()} 
 
print(result) 

结果:

{'UK': 33.0, 'PT': 67.5, 'FR': 25.0} 

请注意,1) 您的预期结果是错误的,并且 2) 我转换为 float ,但您可以通过执行以下操作将其保留为整数作为字符串

result = {k:str(sum(v)//len(v)) for k,v in d.items()} 

给出:

{'PT': '67', 'FR': '25', 'UK': '33'}