簡體   English   中英

復雜的字典迭代

[英]complicated iteration through a dictionary

我是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(averages_dict中的鍵)的平均值。 最后,我想要一個探針平均值列表,每個人[ave(A),ave(B),ave(C)]。

我希望這是有道理的,但有希望讓我更清楚。

所以我試圖編寫一個首先啟動空列表(vals)的for循環,追加每個探測列表的第一個項目(值),計算該位置的平均值(個體),然后將此平均值附加到新列表(平均值)。

即在第一次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. 將該個體的讀數sum除以個體讀數的數量( len );
  4. 創建平均值列表。

我明白了:

[7.425000000000001, 7.074999999999999, 7.3]

使用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

avg現在等於:

 [7.425000000000001, 7.074999999999999, 7.3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM