我有一个dict数组,如果每个dict中有另一个dict数组的话。我原来的字典是这样写的
[{'substepheading': 'Heading 1',
'substepnumber': '1',
'substepparams': [{'name': 'upload file', 'paramselected': 'no'}]},
{'substepheading': 'Heading 2',
'substepnumber': '2',
'substepparams': [{'name': 'clean data', 'paramselected': 'no'}]}]
我有另一个dict,它包含对指定步骤号和参数的更新
[{'substepnumber': 2, 'substepparams': [{'name': 'clean room'}]}]
我试过了,但子阵列没有得到正确的更新
for substep in substepdetails:
for modifiedsubstep in substepdetailstoupdate:
if((modifiedsubstep['substepnumber']) == int(substep['substepnumber'])):
substep.update(modifiedsubstep)
dict的第二级数组被这样覆盖
[{'substepheading': 'choose file',
'substepnumber': '1',
'substepparams': [{'name': 'upload file', 'paramselected': 'no'}]},
{'substepheading': 'prepare the data',
'substepnumber': '2',
'substepparams': [{'name': 'clean room'}]}]
我知道我可以为这个特殊的情况再添加一个内部循环,但是我想知道在这种情况下是否有更优雅的方法来更新dict,特别是如果可以有多个子级别这样的话
编辑:所需的输出如下
[{'substepheading': 'choose file',
'substepnumber': '1',
'substepparams': [{'name': 'upload file', 'paramselected': 'no'}]},
{'substepheading': 'prepare the data',
'substepnumber': '2',
'substepparams': [{'name': 'clean room', 'paramselected': 'no'}]}]
您真正需要的是在数据上有两个循环,在更新上有一个循环(没有嵌套循环)。其思想是创建一个
dict
或records
,将substepnumber
映射到substepparams
(注意,这假设substepparams
没有重复。这个案子可以通过一些额外的工作来处理。)对于每个更新,您可以在摊销O(1)时间内访问相应的
substepnumber
,并更新相关substepparams
列表中的每个dict因为
records
和data
引用相同的dict,您的原始数据将自动更新相关问题 更多 >
编程相关推荐