python - 通过字典进行复杂的迭代

标签 python list dictionary iteration

我是 Python 和编程的新手。曾试图寻找答案,但我真的在为这个问题苦苦挣扎。非常感谢任何帮助。

我的数据在字典中如下:

averages_dict = {'probe1': [8.1, 7.9, 8.2], 'probe2': [7.8, 7.5, 7.7], 'probe3': [7.1, 6.6, 6.8], 'probe4': [6.7, 6.3, 6.5]}

其中列表中的项目(值)对应于不同的个体 [A、B、C]。

我正在尝试编写一个脚本来获取每个人(值列表 [A、B、C] 中的项目)的 probe1、probe2 和 probe3(平均值字典中的键)的平均值。最后,我想要一个探针平均值列表,每个个体 [ave(A)、ave(B)、ave(C)]。

我希望这是有道理的,但希望随着我的进行,它会变得更加清晰。

所以我正在尝试编写一个 for 循环,它首先启动一个空列表 (vals),附加每个探测列表的第一项(值),计算该位置(个人)的平均值,然后将该平均值附加到一个新列表(平均值)。

即这是我在第一次 averages_dict 迭代后想要的(对于每个列表中的第一个位置):

vals = [8.1, 7.8, 7.1, 6.7]

然后计算此列表的平均值并将平均值附加到新列表(平均值) 其中大部分我可以使用这段代码轻松完成:

vals = []
for item in averages_dict:
    vals.append(averages_dict[item][0])

ave_dict = dict()
i=0
for val in vals:
    i = i + val

ave = i / len(vals)

我正在努力解决的问题是如何再次从字典的开头重新迭代,在列表的第二个位置,依此类推,以便为每个人获得最终的平均列表,如如下:

averages = [7.425, 7.075, 7.3]

我意识到在上面这段代码之前我可能需要某种计数器和 while 或 for 循环,但不知道是什么?

提前致谢 - 任何建议或帮助将不胜感激。

最佳答案

我想你想要的是:

averages = [sum(items)/len(items)
            for items in zip(*averages_dict.values())]

这是一个列表理解,它所做的是:

  1. zip 将字典中的每组值组合在一起,这样您就可以获得三个人中每个人的值列表,而不是每个探测器的值列表;
  2. for 遍历每个个体;
  3. 将该个体的读数总和除以该个体的读数数(len);和
  4. 创建一个平均值列表。

我得到:

[7.425000000000001, 7.074999999999999, 7.3]

关于python - 通过字典进行复杂的迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20760280/

相关文章:

python - 根据两个列表中元组的出现次数更新defaultdict计数

c# - 需要经过排序的字典,旨在查找键小于或大于搜索值的值

list - Haskell 最左边树的最深节点

c++ - 有没有办法在不重载 << 运算符的情况下打印出 std::list 的内容?

python - 如何通过主题建模制作主题的百分比条形图?

python - matplotlib 等高线图 : warning about `no contour levels were found`

r - 创建列表时出现意外的符号错误

linux - 我可以使用 Google Earth Server 作为 openLayers 的 basemap 吗?

python - 如何捕获 Windows 计算机上的所有用户事件 [不是任何特定于应用程序]?

python - 类属性与方法参数性能? Python