使用python 2.x,假设我有以下内容:
target = {'field':'occupation', 'value':'Sanitation Specialist'}
thedict = {'name:':'Wilson','hobbies':['Sports', 'Basketball','Volleyball'], 'job':{
'occupation': 'Janitor',
'years_worked': 5,
'locations': {
'loc_name': 'CompanyA',
'loc_alias': 'The Finest Company',
},
'married': 'Yes'
'children': 5
}};
如何创建一个函数,以便我可以用CnestedA
替换嵌套字段value
中的值,而无需硬编码CnestedA
字段实际嵌套在fieldC
中的事实}(即thedict['job']['occupation']
?函数应该采用如上所述的“目标”对象,并更新thedict
。请注意,如果'target'对象保持不变,但在{{1 } {},dict
恰好是thedict中的一个直接键,(即occupation
),该函数仍然可以工作。如果它找不到thedict['occupation']
,那么{{1}没有任何反应}}
答案 0 :(得分:0)
您可以使用递归搜索算法执行此操作,但效率低下。相反,重新组织数据或创建记录每个字段所在位置的辅助数据结构更好。
要重新组织数据以进行有效查找,您需要对dict进行解除嵌套,将所有键移动到顶级字典。如果您需要先前在密钥路径中编码的信息,请将其放入值中。然后,要执行更新,您可以使用
denested_dict[key] = value
或
denested_dict[key].data = value
如果您创建某种值对象,其中data
字段用于表示该值,而path
字段用于记录旧路径。
如果重新组织数据不方便,您可以创建一个将每个键映射到具有该键的字典的字典。然后,要更新任意嵌套的密钥,您可以使用新的dict来查找dict以更新和更新它。
index_dict[key][key] = value