0

使用 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
}};

如何创建一个函数,以便我可以替换嵌套字段中的值,CnestedAvalue无需硬编码该CnestedA字段实际上嵌套在其中的事实fieldC(即thedict['job']['occupation']?该函数应该像上面一样采用“目标”对象,并且thedict要更新。注意如果“目标”对象保持不变,但在 中dictoccupation恰好是字典中的直接键,(即thedict['occupation']),该函数仍然可以工作。如果它没有找到field,那么什么也不会发生thedict

4

1 回答 1

0

您可以使用递归搜索算法来做到这一点,但效率低下。相反,重新组织数据或创建一个辅助数据结构来记录每个字段的位置会是一个更好的主意。

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

denested_dict[key] = value

或者

denested_dict[key].data = value

如果您创建了某种类型的值对象,其中包含一个data用于过去值的path字段和一个用于记录旧路径的字段。

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

index_dict[key][key] = value
于 2013-08-16T17:11:19.813 回答