gpt4 book ai didi

python - 递归搜索和修改复杂对象(dict ofists of dicts)

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

我有一个复杂的对象。

目前它是字典列表的字典。但将来可能会发生变化,同时仍然只使用列表和字典。

我想查找所有类型为“datetime”的列表元素字典值并将它们更改为字符串。

递归搜索似乎有效,但无法弄清楚如何将修改后的值写回相应的值(dict val 或列表项)。

def mod_complex(c_obj):
if isinstance(c_obj, datetime.datetime):
print(c_obj)
c_obj = str(c_obj) ???
elif isinstance(c_obj, list):
for v in c_obj:
mod_complex(v)
elif isinstance(c_obj, dict):
for k, v in c_obj.items():
mod_complex(v)

最佳答案

您有一个简单的方法,即返回一个新对象,每个子对象也是一个新对象等。

看起来像这样:

def mod_complex(c_obj):
if isinstance(c_obj, int):
return c_obj*2
elif isinstance(c_obj, list):
return [mod_complex(v) for v in c_obj]
elif isinstance(c_obj, dict):
return {f"new {k}": mod_complex(v) for k, v in c_obj.items()}

ob = {
"1st list": [
{ "A": 1, "B": 2 },
{ "C": 3, "D": 4 },
],
"2nd list": [
{ "E": 5, "F": 6 },
{ "G": 7, "H": 8 },
]
}

print(mod_complex(ob))

打印内容:

{
"new 1st list": [
{ "new A": 2, "new B": 4 },
{ "new C": 6, "new D": 8 }
],
"new 2nd list": [
{ "new E": 10, "new F": 12 },
{ "new G": 14, "new H": 16 }
]
}

这样做的好处是,您可以确定不会发生任何变化,因此 print(ob) 输出:

{ 
"1st list": [
{ "A": 1, "B": 2 },
{ "C": 3, "D": 4 },
],
"2nd list": [
{ "E": 5, "F": 6 },
{ "G": 7, "H": 8 },
]
}

关于python - 递归搜索和修改复杂对象(dict ofists of dicts),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55070398/

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