[英]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())]
這是一個列表理解,它的作用是:
zip
在一起,以便獲得三個人中每個人的值列表,而不是每個探針; for
通過每個個人的回路; sum
除以個體讀數的數量( len
); 和 我明白了:
[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.