【问题标题】:getting an average of values from dictionaries with keys with a list of values从具有值列表的键的字典中获取值的平均值
【发布时间】:2016-10-19 14:57:21
【问题描述】:

对于我在大学的最后一次 Python 作业,我需要在 Jupyter Notebook 中创建函数来进行小型研究。我需要从 .csv 文件创建字典和列表,并为从 read_csv() 函数获得的字典构建函数。对于这个任务,我可以询问和谷歌,因为我必须制作的功能是人们遇到的相当普遍的问题。

这些字典在我的 read_csv() 返回后的样子如下:

data_dict = { "abc" : [1, 2, 3, 4],
              "def" : [4, 5, 6, 7],
              "ghi" : [8, 9, 10, 11]
            }

所以基本上是一个包含大量键的字典,每个键都有一个值列表。我需要做的是将每个列表的第一个索引的所有数字相加并从总和中获取平均值,然后是第二个索引,第三个索引等等,返回所有平均值的列表。结果是这样的:

averages = [4.333, 5.333, 6.333, 7.333]

如果不导入任何东西怎么办?在过去的几周里,我们还没有真正讨论过使用字典,我尝试在互联网上寻找解决方案,但找不到任何处理不同列表中特定索引处的整数或浮点数的总和。

【问题讨论】:

  • 另外,考虑使用data_dict.values()
  • 为什么不导入?
  • @PadraicCunningham 家庭作业
  • @jcfollower 非常感谢,.values() 确实有助于更好地掌握如何使用字典及其值。

标签: python list python-2.7 dictionary jupyter-notebook


【解决方案1】:

首先收集值,转置它们,然后很容易:

# values of the dict
values = data_dict.values()

# transposed average
averages = [sum(x)/float(len(x)) for x in zip(*values)]
print (averages)

返回:

[4.333333333333333, 5.333333333333333, 6.333333333333333, 7.333333333333333]

一个更短的'less-explanatory'单行将是:

averages = [sum(x)/float(len(x)) for x in zip(*data_dict.values())]

【讨论】:

  • 你在叫什么?
  • 你不应该打电话给list,没有必要。
  • sum 也是一个起始值,所以你只需要sum(x, 0.0) / len(x)
  • 非常感谢,对我来说,使用列表列表比使用字典要容易得多。您的建议帮助我更多地理解字典并弄清楚如何处理我的函数。
【解决方案2】:

zip 获取列的值,并将每列的sum 除以其len

【讨论】:

    【解决方案3】:

    一种方法可能是:

    data_dict = { "abc" : [1, 2, 3, 4],
                  "def" : [4, 5, 6, 7],
                  "ghi" : [8, 9, 10, 11]
                }
    l1 = data_dict.values()
    l2 = []
    for i in zip(*l1):
        l2.append(float(sum(i)) / float(len(i)))
    print l2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      相关资源
      最近更新 更多