如何从字典中合并和创建dict of dict

2024-06-16 09:15:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似下面的字典,其中一个列表元素的值将是同一字典中某个地方的键

{"a": ["b", "c"], "b": ["D"], "c": ["A", "B", "C"], "A": ["abc", "aab", "aba"], "B": ["bcd", "bdc"], "C": ["dab", "dbc", "def", "dgr"], "abc": ["eee", "ehj"], "eee": ["ghi"], "aab": ["tuv", "xuv"], "ehj": ["giu"], "aba": ["suv", "ruv"]}

我想把它们全部合并如下

{"a": [{"b": ["D"]}, {"c": [{"A": [{"abc": [{"eee": ["ghi"], "ehj": ["giu"]}, {"aab": ["tuv", "xuv"]}, {"aba": ["suv", "ruv"]}]}, {"B": ["bcd", "bdc"]}, {"C": ["dab", "dbc", "def", "dgr"]}]}]}]}

JSON格式:

{
    "a": [{
        "b": ["D"]
    }, {
        "c": [{
            "A": [{
                "abc": [{
                    "eee": ["ghi"],
                    "ehj": ["giu"]
                }, {
                    "aab": ["tuv", "xuv"]
                }, {
                    "aba": ["suv", "ruv"]
                }]
            }, {
                "B": ["bcd", "bdc"]
            }, {
                "C": ["dab", "dbc", "def", "dgr"]
            }]
        }]
    }]
}

此外,键的值(键元素列表)数量也不相等

谢谢你的帮助


Tags: defdbcabcdababaghiaabbcd
1条回答
网友
1楼 · 发布于 2024-06-16 09:15:45

您可以使用递归:

import json
d = {"a": ["b", "c"], "b": ["D"], "c": ["A", "B", "C"], "A": ["abc", "aab", "aba"], "B": ["bcd", "bdc"], "C": ["dab", "dbc", "def", "dgr"], "abc": ["eee", "ehj"], "eee": ["ghi"], "aab": ["tuv", "xuv"], "ehj": ["giu"], "aba": ["suv", "ruv"]}
def merge(n):
   r = [(i, merge(i)) if i in d else i for i in d[n]]
   if all(isinstance(j, str) for j in r):
      return r
   return [{a:b} for a, b in r] if any(any(isinstance(j, dict) for j in b) for _, b in r) else \
          [{a:b for a, b in r}]

result = {a:merge(a) for a in d if all(a not in b for b in d.values())}
print(json.dumps(result, indent=4))

输出:

{
    "a": [
        {
            "b": [
                "D"
            ]
        },
        {
            "c": [
                {
                    "A": [
                        {
                            "abc": [
                                {
                                    "eee": [
                                        "ghi"
                                    ],
                                    "ehj": [
                                        "giu"
                                    ]
                                }
                            ]
                        },
                        {
                            "aab": [
                                "tuv",
                                "xuv"
                            ]
                        },
                        {
                            "aba": [
                                "suv",
                                "ruv"
                            ]
                        }
                    ]
                },
                {
                    "B": [
                        "bcd",
                        "bdc"
                    ]
                },
                {
                    "C": [
                        "dab",
                        "dbc",
                        "def",
                        "dgr"
                    ]
                }
            ]
        }
    ]
}

相关问题 更多 >