字典中的复杂迭代

2024-09-27 00:14:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉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)。在

也就是说,这是我在第一次平均数迭代后想要的结果(对于每个列表中的第一个位置):

^{pr2}$

然后计算此列表的平均值并将平均值追加到新列表(平均值) 我可以很容易地用这段代码完成:

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循环,在上面的代码之前,但我不知道是什么?在

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


Tags: 答案代码列表for字典itemdict平均值
2条回答

我想你想要的是:

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

这是一个列表理解,它的作用是:

  1. zip字典中的每一组值放在一起,这样就可以得到三个个体中每个个体的值列表,而不是每个探针的值列表
  2. for循环遍历每个个体
  3. 将该个体的sum读数除以该个体的读数(len);以及
  4. 创建一个平均值列表。在

我得到:

^{pr2}$

使用for循环执行此操作的一种方法是:

avg = []
l = len(averages_dict)  #for loop easier to read/calculate len once rather than twice

for i in range(l):                       # in the example case, range is 0-2(len is 3)
    total = 0                            # initiate/re-initiate total
    for d in averages_dict:              # for each item in dict
        total += averages_dict[d][i]     # add dict[d] position i to total
    avg.append(total/l)                  # append total/len to avg

平均值现在等于:

^{pr2}$

相关问题 更多 >

    热门问题