从列表python中找到最大平均值

时间:2017-12-19 05:32:09

标签: python

我有一个清单:

input= [
   ["Pakistan", 23],
   ["Pakistan", 127],
   ["India", 3],
   ["India", 71],
   ["Australia", 31],
   ["India", 22],
   ["Pakistan", 81]
]

现在我想过滤掉平均值最高的键值。就像在这种情况下,输出应该是"巴基斯坦":

out = "Pakistan"

任何人都可以提供帮助

4 个答案:

答案 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')