我目前在嵌套词典中遇到问题,我无法终生诊断正在发生的事情。
所以...我从一个嵌套的字典开始,像这样:
$group
我想做的是使用一个嵌套的for循环进行迭代,并更新Loop1,Loop2,Loop3等中的每个键。
每个列表项都应基于以下函数进行更新:该函数基于存储在如下所示数据框中的tag_id从数据库中提取数据:
ctrl_data =
{'Loop1': {'time_stamp': [],
'pv': [],
'sp': [],
'op': [],
'string_mode': [],
'auto_mode': [],
'cascade_mode': [],
'operational': [],
'operational_min': [],
'operational_max': []},
'Loop2': {'time_stamp': [],
'pv': [],
'sp': [],
'op': [],
'string_mode': [],
'auto_mode': [],
'cascade_mode': [],
'operational': [],
'operational_min': [],
'operational_max': []},
'Loop3': {time_stamp': [],
......etc.
我正在使用的循环如下:
Loop1 Loop2 Loop3.......
id_type
pv 1 9 17
sp 2 10 18
op 3 11 19
string_mode NaN NaN NaN
auto_mode 4 12 20
cascade_mode 5 13 21
operational 6 14 22
operational_min 7 15 23
operational_max 8 16 24
就好像拉回正确的tagid和列名而言,循环似乎正在正确运行,但是由于某种原因,当拉取数据时,每次重新进入第一个for循环时,它将覆盖前一个for循环。请查看此行为的截图。
答案 0 :(得分:1)
我现在找到了解决方案。正如@ Ch3steR所指出的,我的字典是任意嵌套的。我不完全理解这种含义,但是我想的是,当我写这篇文章时,它是这样的:
ctrl_data[i][order[0]] = values_pull_process(j[1],start1,end1,num_points,token,base_uri)[1]
它正在用新数据覆盖每个pv,sp,op等键的数据。我不确定为什么会这样,因为ctrl_data [i]应该调用主键“ Loop1”,但是无论如何,在此站点的“添加或更新嵌套字典项”部分下都找到了解决方案: https://www.learnbyexample.org/python-nested-dictionary/
解决方案是使用以下格式:
ctrl_data[i] = {order[0]: values_pull_process(j[1],start1,end1,num_points,token,base_uri)[1]}
注意: 使用.append或其他列表方法也导致相同的原始问题。