我有一个清单:
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
现在我想过滤掉平均值最高的键值。就像在这种情况下,输出应该是"巴基斯坦":
out = "Pakistan"
任何人都可以提供帮助
答案 0 :(得分:7)
您可以使用Pandas:
import pandas as pd
l = [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
pd.DataFrame(l).groupby([0]).mean().idxmax().values[0]
输出:
'Pakistan'
答案 1 :(得分:3)
另一个版本(仅限stdlib):
from __future__ import division
import collections
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
t = collections.defaultdict(list)
for c,n in input:
t[c].append(n)
max(t, key=lambda c: sum(t[c]) / len(t[c]))
'Pakistan'
答案 2 :(得分:2)
以下是另一种实施方式。
from collections import defaultdict
import operator
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
cv_dict=defaultdict(list)
for key, score in input:
cv_dict[key].append(score)
for k,v in cv_dict.items():
cv_dict[k]=sum(v)/len(v)
max(cv_dict, key=cv_dict.get)
希望它有所帮助!
答案 3 :(得分:1)
为什么不尝试使用内置max
方法,而不导入任何繁重的外部模块或使其过于复杂?
input= [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
track={}
for i in input:
if i[0] not in track:
track[i[0]]=[i[1]]
else:
track[i[0]].append(i[1])
print(max([(sum(j)/len(j),i) for i,j in track.items()]))
输出:
(77.0, 'Pakistan')