【问题标题】:How to average just the first, second values in a dictionary of lists?如何平均列表字典中的第一个,第二个值?
【发布时间】:2021-10-02 20:49:00
【问题描述】:

我有一个字典,其中每个键都映射到列表的值(特别是坐标):

3 -> [['7', '16'], ['72', '48'], ['36', '52'], ['75', '36'], ['52 ', '28'], ['76', '44'], ['56', '35'], ['15', '21'], ['88', '32'], ['61' ', '34'], ['94', '12'], ['71', '59'], ['25', '16'], ['62', '1'], ['16 ', '32'], ['71', '4'], ['42', '32'], ['37', '49'], ['49', '34'], ['3 ', '5'], ['49', '40'], ['40', '53'], ['57', '48'], ['10', '9'], ['97 ', '3']]

2 -> [['71', '84'], ['32', '74'], ['51', '85'], ['55', '96'], ['34 ', '64'], ['76', '75'], ['54', '100'], ['60', '85'], ['40', '78'], ['78' ', '91'], ['100', '98'], ['42', '77'], ['39', '60'], ['38', '77'], ['66 ', '67'], ['66', '76'], ['86', '68']]

1 -> [['11', '69'], ['10', '74'], ['10', '75'], ['14', '77'], ['2 ', '60'], ['14', '99'], ['10', '60'], ['8', '87']]

对于每个键,我需要平均所有 X 坐标和所有 Y 坐标,但我无法弄清楚如何遍历每个键并平均每个值。

任何帮助将不胜感激!

【问题讨论】:

    标签: python list dictionary average


    【解决方案1】:

    您可以使用dict.items() 函数来迭代键和值,然后计算 Xs 和 Ys 的平均值。

    这是一个示例代码:

    def avg(list):
        return sum(list) / len(list)
    
    for k, v in dict.items():
        x_sum = avg([int(e[0]) for e in v])
        y_sum = avg([int(e[1]) for e in v])
    

    当然,您需要将字符串转换为整数(或浮点数),因为它们是您的字符串。

    【讨论】:

      【解决方案2】:

      您可以在坐标列表上使用 zip() 将所有 X 和 Y 隔离到单独的列表中,然后您可以处理这些列表以计算平均值:

      D = {
           3:[['7', '16'], ['72', '48'], ['36', '52'], ['75', '36'], ['52', '28'], ['76', '44'], ['56', '35'], ['15', '21'], ['88', '32'], ['61', '34'], ['94', '12'], ['71', '59'], ['25', '16'], ['62', '1'], ['16', '32'], ['71', '4'], ['42', '32'], ['37', '49'], ['49', '34'], ['3', '5'], ['49', '40'], ['40', '53'], ['57', '48'], ['10', '9'], ['97', '3']],
           2:[['71', '84'], ['32', '74'], ['51', '85'], ['55', '96'], ['34', '64'], ['76', '75'], ['54', '100'], ['60', '85'], ['40', '78'], ['78', '91'], ['100', '98'], ['42', '77'], ['39', '60'], ['38', '77'], ['66', '67'], ['66', '76'], ['86', '68']],
           1:[['11', '69'], ['10', '74'], ['10', '75'], ['14', '77'], ['2', '60'], ['14', '99'], ['10', '60'], ['8', '87']]
          }
      
      A = {k:[sum(map(float,x))/len(v),sum(map(float,y))/len(v)] 
           for k,v in D.items() for x,y in [zip(*v)]}
      
      print(A)
      {3: [50.44, 29.72], 2: [58.11764705882353, 79.70588235294117], 1: [9.875, 75.125]}
      

      请注意,您应该尽早将数字数据存储为正确的数字类型,这样您就不必在程序的其余部分将其从字符串转换为其他任何地方

      一旦您的数据是可用的数字类型,计算平均值的代码就会变得更简单/更清晰:

      D = {k:[ [float(x),float(y)] for x,y in v] for k,v in D.items() }
      
      A = {k:[sum(x)/len(v),sum(y)/len(v)] for k,v in D.items() for x,y in [zip(*v)]}
      

      【讨论】:

        猜你喜欢
        • 2014-04-14
        • 2019-03-12
        • 2021-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多