gpt4 book ai didi

python - 递归总是更新字典

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

def recursion(input_type):
print('input_type ',input_type)
if isinstance(input_type, dict):
num = 0
for k,v in input_type.items():
if isinstance(v, dict):
print('from recursion')
recursion(v)
elif isinstance(v, list):
for j in v:
if isinstance(j, dict):
print('from recursion level 2')
recursion(j)
else:
temp_dict = {k:v}
print('type: ',type(temp_dict), k, v)
print('num',num)
num = num+1

for i in list_:
recursion(i)

如何从递归中获取临时结果。

考虑如下所示的输入:

input: [{'a':a, 'b':b, 'c':[{'d':d, 'e':e}]}]
Updated input: [ {'a':a, 'b':b, 'c': { 'd':d, 'e': [ {'f':f, 'g':g}, {'f':f1, 'g':g1} ] } } ]

desired output: [{'a':a, 'b':b, 'd':d, 'f':f, 'g':g, 'f_new':f1, 'g_new':g1}]

如果 key 重复,那么它应该更新,例如将“f”更新为“f_new”或类似的内容

提前谢谢您!!

最佳答案

您可以迭代字典项目,如果项目是列表,则递归地展平其中的字典:

def f(o):
return {a: b for k, v in o.items() for a, b in ((i for d in (v if isinstance(v, list)
else (v,)) for i in f(d).items()) if isinstance(v, (list, dict)) else ((k, v),))}

因此给定:

lst = [{'a': 'a', 'b': 'b', 'c': [{'d': 'd', 'e': 'e'}, {'f': [{'g': 'g'}]}]}]

[f(d) for d in lst] 将返回:

[{'a': 'a', 'b': 'b', 'd': 'd', 'e': 'e', 'g': 'g'}]

给出的:

lst = [{'a': 'a', 'b': 'b', 'c': {'d': 'd', 'e': {'f': 'f', 'g': 'g'}}}]

[f(d) for d in lst] 将返回:

[{'a': 'a', 'b': 'b', 'd': 'd', 'f': 'f', 'g': 'g'}]

为了避免合并键发生冲突,请将 _new 附加到重复键,直到发现它不是预先存在的,在这种情况下,您无法使用理解:

def f(o):
output = {}
for k, v in o.items():
for a, b in ((i for d in (v if isinstance(v, list) else (v,)) for i in f(d).items())
if isinstance(v, (list, dict)) else ((k, v),)):
while a in output:
a += '_new'
output[a] = b
return output

因此给定:

lst = [{'a': 'a', 'b': 'b', 'c': {'d': 'd', 'e': [{'f': 'f', 'g': 'g'}, {'f': 'f1', 'g': 'g1'}]}}]

[f(d) for d in lst] 将返回:

[{'a': 'a', 'b': 'b', 'd': 'd', 'f': 'f', 'g': 'g', 'f_new': 'f1', 'g_new': 'g1'}]

演示:https://repl.it/@blhsing/NonstopSeveralActionscript

关于python - 递归总是更新字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60400272/

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