python - 计算字典字典中的增量
问题描述
我有一个字典字典,其中包含这样的元组列表:
mydict:{'A1':{'week1': [(1,1,34),(1,2,3),(1,3,10),(2,1,3),(2,2,9)...()],
'week2': [(1,1,4),(1,2,11),(1,3,8),(2,1,5),(2,2,7)...()],
...
'week19': [(1,1,12),(1,2,13),(1,3,32),(2,1,45),(2,2,15)...()],
'week20': [(1,1,43),(1,2,30),(1,3,6),(2,1,7),(2,2,4)...()]}
'A2':{'week1': [(1,1,6),(1,2,4),(1,3,2),(2,1,87),(2,2,32)...()],
'week2': [(1,1,32),(1,2,15),(1,3,43),(2,1,2),(2,2,12)...()],
...
'week20': [(1,1,3),(1,2,3),(1,3,16),(2,1,17),(2,2,11)...()]}
...
}
我想计算字典内每个元组中第三项(它们的前两项相同)的增量,在每周(例如,第 1 周和第 2 周,.. 第 19 周和第 20 周)之间,并将它们作为新字典在主字典中。所以我想要的结果可能是这样的:
out_dict:{'A1':{'week1': [(1,1,34),(1,2,3),(1,3,10),(2,1,3),(2,2,9)...()],
'week2': [(1,1,4),(1,2,11),(1,3,8),(2,1,5),(2,2,7)...()],
...
'week19': [(1,1,12),(1,2,13),(1,3,32),(2,1,45),(2,2,15)...()],
'week20': [(1,1,43),(1,2,30),(1,3,6),(2,1,7),(2,2,4)...()],
'delta_wk1_wk2':[(1,1,30),(1,2, 8),(1,3,2),(2,1,2),(2,2,2)...()],
'delta_wk20_wk19':[(1,1,31),(1,2, 23),(1,3,26),(2,1,38),(2,2,11)...()]
...
}
'A2':{'week1': [(1,1,6),(1,2,4),(1,3,2),(2,1,87),(2,2,32)...()],
'week2': [(1,1,32),(1,2,15),(1,3,43),(2,1,2),(2,2,12)...()],
...
'week19': [(1,1,7),(1,2,0),(1,3,2),(2,1,33),(2,2,10)...()],
'week20': [(1,1,3),(1,2,3),(1,3,16),(2,1,17),(2,2,11)...()]}
...
'delta_wk1_wk2':[(1,1,26),(1,2, 11),(1,3,41),(2,1,85),(2,2,20)...()],
'delta_wk20_wk19':[(1,1,4),(1,2, 3),(1,3,14),(2,1,14),(2,2,1)...()]
}
解决方案
要获得每一对周,您可以使用成对迭代器,您可以查看 itertools 配方以查看实现;它看起来像这样:
from itertools import tee
def pairwise(iterable):
x, y = tee(iterable)
next(y, None)
return zip(x, y)
然后你可以在你的字典条目上使用它:
def add_deltas(data):
for first, second in pairwise(data.keys()):
deltas = []
for a, b in zip(data[first], data[second]):
if b:
deltas.append((a[0], a[1], abs(a[2] - b[2])))
data[f'delta_{first}_{second}'] = deltas
使用它来遍历您的字典:
for v in mydict.values():
add_deltas(v)
推荐阅读
- c# - 根据官方文档,Asp.net Core 3.0 CORS 无法正常工作
- javascript - 在 react/html 的输入框中看不到输入
- java - 使用 faker 生成 java 姓氏,但只需要字母
- angular - Angular - 使用 ng5-slider 进行单元测试
- svn - 如何在提交到主干之前合并来自两个分支的更改并进行测试?
- amazon-web-services - 从同一区域但不同帐户的 S3 存储桶读取需要多少费用
- javascript - 用于暂停 youtube 视频的内容脚本
- reactjs - react fetch 发送一个待处理的响应
- sql - 使用 WindowFunction 解决问题的问题
- android - 华为手机上没有谷歌服务会反应原生工作吗?