我正在尝试访问嵌套词典中的特定键,然后将其值与列表中的字符串匹配。如果列表中的字符串包含字典值中的字符串,我想用列表值覆盖字典值。下面是一个示例。
my_list = ['string1~','string2~','string3~','string4~','string5~','string6~']
my_iterable = {'A':'xyz','B':'string6','C':[{'B':'string4','D':'123'}],'E':[{'F':'321','B':'string1'}],'G':'jkl'
}
我要查找的键是B
,目标是用string6
覆盖string6~
,用string4
覆盖string4~
,依此类推在B
中找到的所有my_iterable
键。
我已经编写了一个函数来计算两个字符串之间的Levenshtein距离,但是我正在努力编写一种有效的方法来覆盖键的值。
def find_and_replace(key,dictionary,original_list):
for k,v in dictionary.items():
if k == key:
#function to check if original_list item contains v
yield v
elif isinstance(v,dict):
for result in find_and_replace(key,v,name_list):
yield result
elif isinstance(v,list):
for d in v:
if isinstance(d,dict):
for result in find_and_replace(key,d,name_list):
yield result
如果我打电话
updated_dict = find_and_replace('B',my_iterable,my_list)
我希望updated_dict
返回以下内容:
{'A':'xyz','B':'string6~','C':[{'B':'string4~','B':'string1~'}],'G':'jkl'
}
这是最有效的解决方案的正确方法,如何修改它以返回包含B
的更新值的字典?