在嵌套字典中迭代列表的循环
Loop that iterate lists in nested dictionaries
我正在尝试构建一个循环来遍历包含列表的字典。
对于主词典 (dict_all) 中的每个子词典,我想遍历所有列表,以便减去列表的第一个元素(仅 'time' 列)到相应列表的每个元素。
为了提供一些上下文,下面是嵌套字典的结构:
dict_all = { 'dict_20' : {"P1S1": df_list_20[0], "P2S1": df_list_20[1], "P3S1": df_list_20[2], "P4S1": df_list_20[3],
"P5S1": df_list_20[4], "P6S1": df_list_20[5], "P7S1": df_list_20[6], "P8S1": df_list_20[7],
"P9S1": df_list_20[8], "P10S1": df_list_20[9], "P1S2": df_list_20[10], "P2S2": df_list_20[11],
"P3S2": df_list_20[12], "P4S2": df_list_20[13], "P5S2": df_list_20[14], "P6S2": df_list_20[15],
"P7S2": df_list_20[16], "P8S2": df_list_20[17], "P9S2": df_list_20[18], "P10S2": df_list_20[19]},
'dict_40' : {"P1S1": df_list_40[0], "P2S1": df_list_40[1], "P3S1": df_list_40[2], "P4S1": df_list_40[3],
"P5S1": df_list_40[4], "P6S1": df_list_40[5], "P7S1": df_list_40[6], "P8S1": df_list_40[7],
"P9S1": df_list_40[8], "P10S1": df_list_40[9], "P1S2": df_list_40[10], "P2S2": df_list_40[11],
"P3S2": df_list_40[12], "P4S2": df_list_40[13], "P5S2": df_list_40[14], "P6S2": df_list_40[15],
"P7S2": df_list_40[16], "P8S2": df_list_40[17], "P9S2": df_list_40[18], "P10S2": df_list_40[19]}}
(为了举例,我只拿了两个嵌套字典,但我总共有六个)
这是二级词典中列表的示例(每个列表的长度不同):
time velocity
0 10.755616 0.059656
1 10.776415 0.131182
2 10.796519 0.232206
3 10.816632 0.355268
4 10.836832 0.531719
5 10.857092 0.751184
6 10.877205 0.964944
7 10.897274 1.136908
8 10.917387 1.333836
9 10.937439 1.553230
10 10.957535 1.726184
11 10.977587 1.870065
12 10.997622 2.049414
13 11.017821 2.211132
14 11.037908 2.248697
15 11.057977 2.261453
16 11.078099 2.244839
17 11.098168 2.116589
18 11.118351 1.981216
19 11.138455 1.774250
20 11.158568 1.499906
21 11.178724 1.250161
22 11.198863 1.002039
23 11.219028 0.751948
24 11.239314 0.486585
25 11.259696 0.264919
循环的全部目的是针对每个列表,使 'time' 列从“0”开始,同时保持每行之间的时间间隔相同。
我设法编写了以下循环来迭代一个孤立的列表,并给出了我想要的输出:
for i in range(len(dfList_20[0]['time'])):
dfList_20[0]['time'][:] = dfList_20[0]['time'][:] - dfList_20[0]['time'][0]
当然,在列表级别进行迭代不会非常有效,因为我需要 240 行代码才能完全达到所需的输出..
提前感谢大家的宝贵时间和解决方案! :)
使用嵌套循环
for nested_dict in dict_all.values():
for dflist in nested_dict.values():
dflist['time'][:] = dflist['time'][:] - dflist['time'][0]
我正在尝试构建一个循环来遍历包含列表的字典。
对于主词典 (dict_all) 中的每个子词典,我想遍历所有列表,以便减去列表的第一个元素(仅 'time' 列)到相应列表的每个元素。 为了提供一些上下文,下面是嵌套字典的结构:
dict_all = { 'dict_20' : {"P1S1": df_list_20[0], "P2S1": df_list_20[1], "P3S1": df_list_20[2], "P4S1": df_list_20[3],
"P5S1": df_list_20[4], "P6S1": df_list_20[5], "P7S1": df_list_20[6], "P8S1": df_list_20[7],
"P9S1": df_list_20[8], "P10S1": df_list_20[9], "P1S2": df_list_20[10], "P2S2": df_list_20[11],
"P3S2": df_list_20[12], "P4S2": df_list_20[13], "P5S2": df_list_20[14], "P6S2": df_list_20[15],
"P7S2": df_list_20[16], "P8S2": df_list_20[17], "P9S2": df_list_20[18], "P10S2": df_list_20[19]},
'dict_40' : {"P1S1": df_list_40[0], "P2S1": df_list_40[1], "P3S1": df_list_40[2], "P4S1": df_list_40[3],
"P5S1": df_list_40[4], "P6S1": df_list_40[5], "P7S1": df_list_40[6], "P8S1": df_list_40[7],
"P9S1": df_list_40[8], "P10S1": df_list_40[9], "P1S2": df_list_40[10], "P2S2": df_list_40[11],
"P3S2": df_list_40[12], "P4S2": df_list_40[13], "P5S2": df_list_40[14], "P6S2": df_list_40[15],
"P7S2": df_list_40[16], "P8S2": df_list_40[17], "P9S2": df_list_40[18], "P10S2": df_list_40[19]}}
(为了举例,我只拿了两个嵌套字典,但我总共有六个)
这是二级词典中列表的示例(每个列表的长度不同):
time velocity
0 10.755616 0.059656
1 10.776415 0.131182
2 10.796519 0.232206
3 10.816632 0.355268
4 10.836832 0.531719
5 10.857092 0.751184
6 10.877205 0.964944
7 10.897274 1.136908
8 10.917387 1.333836
9 10.937439 1.553230
10 10.957535 1.726184
11 10.977587 1.870065
12 10.997622 2.049414
13 11.017821 2.211132
14 11.037908 2.248697
15 11.057977 2.261453
16 11.078099 2.244839
17 11.098168 2.116589
18 11.118351 1.981216
19 11.138455 1.774250
20 11.158568 1.499906
21 11.178724 1.250161
22 11.198863 1.002039
23 11.219028 0.751948
24 11.239314 0.486585
25 11.259696 0.264919
循环的全部目的是针对每个列表,使 'time' 列从“0”开始,同时保持每行之间的时间间隔相同。
我设法编写了以下循环来迭代一个孤立的列表,并给出了我想要的输出:
for i in range(len(dfList_20[0]['time'])):
dfList_20[0]['time'][:] = dfList_20[0]['time'][:] - dfList_20[0]['time'][0]
当然,在列表级别进行迭代不会非常有效,因为我需要 240 行代码才能完全达到所需的输出..
提前感谢大家的宝贵时间和解决方案! :)
使用嵌套循环
for nested_dict in dict_all.values():
for dflist in nested_dict.values():
dflist['time'][:] = dflist['time'][:] - dflist['time'][0]