如何搜索/遍历dict中的特定键以更新python中的值?

时间:2013-08-16 16:53:52

标签: python

使用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}没有任何反应}}

1 个答案:

答案 0 :(得分:0)

您可以使用递归搜索算法执行此操作,但效率低下。相反,重新组织数据或创建记录每个字段所在位置的辅助数据结构更好。

要重新组织数据以进行有效查找,您需要对dict进行解除嵌套,将所有键移动到顶级字典。如果您需要先前在密钥路径中编码的信息,请将其放入值中。然后,要执行更新,您可以使用

denested_dict[key] = value

denested_dict[key].data = value

如果您创建某种值对象,其中data字段用于表示该值,而path字段用于记录旧路径。

如果重新组织数据不方便,您可以创建一个将每个键映射到具有该键的字典的字典。然后,要更新任意嵌套的密钥,您可以使用新的dict来查找dict以更新和更新它。

index_dict[key][key] = value