【发布时间】:2022-01-07 14:05:14
【问题描述】:
我有一个带有嵌套字典列表的字典,如下所示:
{'data1': [{'data2': 'value2'},
{'data3': [{'data4': 'value4'},
{'data5': [{'data6': 'value6'}, {'data7': 'value7'}]}]}]}
我要获取:
{'data1': {'data2': 'value2',
'data3': {'data4': 'value4',
'data5': {'data6': 'value6', 'data7': 'value7'}}}}
所以有 2 个任务,将单个子字典转换为 key:value({'data2':'value2'} 到 'data2':'value2')并将字典列表转换为嵌套字典({'data5': [{'data6':'value6'},{'data7' : 'value7'}]} 到 'data5': {'data6':'value6','data7' : 'value7'})。
这是一个深度嵌套的多层递归字典。
我正在尝试这样的事情:
def flat(j):
if not isinstance(j, (dict, list)):
return j
if isinstance(j, dict):
p=list(j.values())
f=list(j.keys())
tipo=type(p[0]).__name__
if tipo=="str":
(Do something)
if isinstance(j, list):
return [flat(v) for v in j]
return {k: flat(v) for k, v in j.items()}
为了扁平化单个字典,但我发现删除子字典并添加键:值的问题。当然还有另一篇关于如何将列表转换为嵌套字典的帖子
【问题讨论】:
-
您尝试过的代码是否存在特殊问题?
-
嵌套是否分支?如果是,你能举个例子吗?如果您有重复的键(例如 data6 == data7)会怎样?
-
@mkrieger 我正在尝试这样的事情: def flat(j): if not isinstance(j, (dict, list)): return j if isinstance(j, dict): p=list( j.values()) f=list(j.keys()) tipo=type(p[0]).__name__ if tipo=="str": (Do something) if isinstance(j, list): return [flat (v) for v in j] return {k: flat(v) for k, v in j.items()} 为了展平单个字典,但我发现删除子字典并添加 key:value 的问题.当然还有另一篇关于如何将列表转换为嵌套字典的帖子
-
不要将大代码作为评论发布,编辑问题;)
-
@nozway 实际上有重复的键,但在不同的子字典下,所以应该没有问题。
标签: python list dictionary nested