基于列表列表第一个元素的平均值 python

Average based on first element of list of lists python

输入是击球手的跑垒列表。它应该 return 击球手平均得分最高的国家。

我试图找到最高平均值,例如,当将以下列表传递给我的方法时,它应该 return "Pakistan".

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

我试过:

创建两个词典:

total={'Australia': 31, 'India': 96, 'Pakistan': 231}  
division={'Australia': 1, 'India': 2, 'Pakistan': 3} 

想到将两个字典的值相除并找到其中的最大值。

还有其他有效的方法吗?

感谢您的帮助。

您可以使用 pandas 来实现,您的代码如下:

import pandas as pd
data = [
    ["Pakistan", 23],
    ["Pakistan", 127],
    ["India", 3],
    ["India", 71],
    ["Australia", 31],
    ["India", 22],
    ["Pakistan", 81]
]
df = pd.DataFrame(data, columns=['country', 'count'])
grouped = df.groupby(['country']).mean().reset_index()
highest = list(grouped.max())
print(highest)

打印:

['Pakistan', '77']

可能可以用更少的代码行来完成,但这行得通!!

def average(data):
    highest = {}
    index = 0
    while True:
        for i in data:
            if i[0] in highest:
                highest[i[0]].append(i[1])
            else:
                highest[i[0]] = [i[1]]
        for i in highest:
            highest[i] = sum(highest[i]) / len(highest[i])
        answer = 0
        for i in highest:
            if highest[i] >= answer:
                answer = i
        return answer
print average(data)

您可以创建一个字典,以国家/地区名称为键,以国家/地区计数和得分列表为值。然后你可以进一步修改同一个字典来计算 avg 并使用 max 来打印具有 max avg 的国家/地区。

代码如下:

>>> a = [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
>>> 
>>> 
>>> a
[['Pakistan', 23], ['Pakistan', 127], ['India', 3], ['India', 71],         ['Australia', 31], ['India', 22], ['Pakistan', 81]]
>>> d = {}
>>> for l in a:
        if l[0] not in d.keys():
            d.update({l[0]:[1,l[1]]})
        else:
            d[l[0]] = [d[l[0]][0]+1,d[l[0]][1]+l[1]]


>>> #updated list
>>> d
{'Pakistan': [3, 231], 'Australia': [1, 31], 'India': [3, 96]} 
>>> for key,val in d.items():
d[key] = val[1]/val[0]

#Updated dict with average per country
>>> d
{'Pakistan': 77.0, 'Australia': 31.0, 'India': 32.0}

>>> max(d.items())
('Pakistan', 77.0)
>>> 

可能有更简单和更 pythonic 的方法来做到这一点,但这就是逻辑所在。

这是另一种方法:

lst = [
["Pakistan", 23],
["Pakistan", 127],
["India", 3],
["India", 71],
["Australia", 31],
["India", 22],
["Pakistan", 81]
]
tuples = [tuple(i) for i in lst]
newdata = {}
for k,v in tuples:
    newdata.setdefault(k, []).append(v)
result = {k:(sum(v)/len(v)) for k,v in newdata.items()}
a = max(result)
b = max(result.values())
print "The highest average is %s: %s " % (a,b)

输出: The highest average is Pakistan: 77