【问题标题】:Average based on first element of list of lists python基于列表python列表的第一个元素的平均值
【发布时间】:2016-02-21 07:30:19
【问题描述】:

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

我试图找到最高的平均值,例如,当下面的列表传递给我的方法时,它应该返回“巴基斯坦”。

[
["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} 

考虑将两个字典的值相除并找到它们中的最大值。

还有其他有效的方法吗?

感谢您的帮助。

【问题讨论】:

    标签: python list dictionary logic


    【解决方案1】:

    您可以使用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']
    

    【讨论】:

      【解决方案2】:

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

      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)
      

      【讨论】:

        【解决方案3】:

        您可以创建一个字典,其中国家名称作为键,国家计数和分数列表作为值。那么你可以进一步修改相同的字典来计算平均值,并使用 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 的方式来做到这一点,但这就是逻辑所在。

        【讨论】:

          【解决方案4】:

          Thia 是另一种方法:

          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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-09-30
            • 2018-02-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-22
            • 2020-07-12
            • 2014-04-14
            相关资源
            最近更新 更多