我正在监控一个不断更新字典的设备,我希望将每个值的当前和下一次更新添加到位(最终对数据进行平均)。问题是我最终附加到同一个字典。我在尝试将当前字典和下一个字典保持在同一个循环中而不会使其变得复杂时遇到了麻烦......
data = {}
迭代0:
data = { 'foo': [1,2,3], 'bar': [2,4,6]}
迭代1:
data = { 'foo': [4,3,7], 'bar': [5,1,3]}
然后将两者相加
datas = { 'foo': [5,5,10], 'bar':[7,5,9]}
依旧......
from collections import Counter
import random
import time
c = Counter()
def update_dict(data):
c.update(data) #I want to take the current values and then add it to the next iteration of these values
print dict(c)
while True:
blah = {i: random.random() for i in range(5)}
time.sleep(1)
update_dict(blah)
我想我可以将更新字典附加到字典列表中并在某些时候添加它们然后清除列表......
答案 0 :(得分:2)
像这样的东西会收集你的例子中的总和:
from itertools import zip_longest
data = {}
def update(new_data):
for key in new_data:
if key in data:
z = zip_longest(data[key], new_data[key], fillvalue = 0)
data[key] = [sum(i) for i in z]
else:
data[key] = new_data[key]
update({'foo': [1,2,3], 'bar': [2,4,6]})
update({'foo': [4,3,7], 'bar': [5,1,3]})
print(data)
答案 1 :(得分:1)
首先,检查密钥是否存在。 如果密钥存在,那么 newList = [sum(a,b)为a,b为zip(数据(' foo'),other_foo)]
然后更新。对不起草率的回答。如有必要,稍后会修复。