gpt4 book ai didi

python - 使用列表递归迭代嵌套字典,并替换匹配的值

转载 作者:行者123 更新时间:2023-12-01 08:01:25 36 4
gpt4 key购买 nike

我想创建一个函数来迭代包含列表的嵌套字典。对于与关键字匹配的每个值,该函数将其替换为另一个关键字。

函数是否返回另一个字典或是否更改主字典并不重要。

我试图将案件分开:- 如果数据是字典,则做一些事情- 如果数据是列表,则制作其他内容

字典:


data_dict = {
"name": "AAAAAA",
"content": "BBBBBB",
"dat": [
{
"author": {
"name": "CCCCCC",
"surname": "DDDDDD",
},
"title": "FFFFFF",
"color": 15258703,
"fields": [
{
"name": "GGGGGG",
"value": "HHHHHH",
},
{
"name": "IIIIII",
"value": "JJJJJJ",
}

],
"thumbnail": {
"url": "KKKKKK"
},
"image": {
"url": "LLLLLL"
},
"footer": {
"text": "MMMMMMM",
"icon_url": "NNNNNN"
}
}
]
}


现在我只是尝试更改每个值,看看我是否也进行了迭代。我可以打印所有值已更改的 data_dict,但我无法在字典中管理它...


def recursive_replace_valuer(data, match, repl):

if isinstance(data, list):
for l in data:
recursive_replace_valuer(l, match, repl)
if isinstance(l, dict):
recursive_replace_valuer(l, match, repl)




elif isinstance(data, dict):
for k,v in data.items():
recursive_replace_valuer(v, match, repl)
data[k] = '______'
print(data)

recursive_replace_valuer(data_dict, 'a','a')

最佳答案

该函数应递归地将函数应用于字典或列表中的值,直到输入data既不是字典也不是列表,此时返回替换值repl 如果给定的数据与给定的搜索字符串匹配匹配:

def replace(data, match, repl):
if isinstance(data, dict):
return {k: replace(v, match, repl) for k, v in data.items()}
elif isinstance(data, list):
return [replace(i, match, repl) for i in data]
else:
return repl if data == match else data

或者,要就地替换原始数据,请使函数迭代给定的字典或列表,并用键(对于字典)或索引(对于列表)替换值(如果匹配),然后递归地应用函数值:

def replace(data, match, repl):
if isinstance(data, (dict, list)):
for k, v in (data.items() if isinstance(data, dict) else enumerate(data)):
if v == match:
data[k] = repl
replace(v, match, repl)

关于python - 使用列表递归迭代嵌套字典,并替换匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55713877/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com