gpt4 book ai didi

python - 如何将多个嵌套字典合并为一个

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

如果我有 n 个不同深度的嵌套字典,其中最深嵌套字典的值作为列表,

例如:

{"a":{"b": {"c": {"d": ["ab"]}}}},
{"a" : {"b": {"d": ["aa"]}}},
{"a": {"f":{"c":["xx"]}}},
{"a":{"b": {"c": {"d": ["ef"]}}}}

我怎样才能将这些组合在一起得到

{"a": {"b": {"c": {"d": ["ab","ef"]}}, "d": ["aa"]}, "f":{"c":["xx"]}}}

这可以被认为是一棵树,其中 "a" 是整个树的父级,"b""f" > 是子树等等。

我尝试使用递归,但实际上我不知道从哪里开始

最佳答案

您可以通过 itertools.groupby 使用递归:

from itertools import groupby
data = [{"a":{"b": {"c": {"d": ["ab"]}}}}, {"a" : {"b": {"d": ["aa"]}}}, {"a": {"f":{"c":["xx"]}}}, {"a":{"b": {"c": {"d": ["ef"]}}}}]
def group(d):
if all(not isinstance(i, dict) for i in d):
return [i for b in d for i in b]
r = [i for b in d for i in b.items()]
_d = [[a, [c for _, c in b]] for a, b in groupby(sorted(r, key=lambda x:x[0]), key=lambda x:x[0])]
return {a:b[0] if len(b) == 1 else group(b) for a, b in _d}

print(group(data))

输出:

{'a': {'b': {'c': {'d': ['ab', 'ef']}, 'd': ['aa']}, 'f': {'c': ['xx']}}}

关于python - 如何将多个嵌套字典合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55465411/

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