dicts嵌套合并

2024-10-02 16:20:50 发布

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

我有多本字典:

a = {
   "project_1": {
       "roles": ["role1"]
   },
   "project_4": ["foo"]
}

b = {
   "project_1": {
       "roles": ["role2"]
   },
   "project_2": {
       "roles": ["role4"]
   }
}
c = {
    "project_5": {
        "roles": ["role5"]
   }
}

如何合并这些词典以获得如下内容:

^{pr2}$

从其他关于合并字典的问题中,我发现答案要么以预先确定的方式覆盖值,要么依赖于唯一键,要么是针对fixed number of dictionaries。我需要为2个或更多字典保留相似键的嵌套值。在

我的问题是:

  • 每个字典有不同数量的键(“project_X”)
  • dicts不是固定深度,而是有一个最大深度

Tags: 答案project内容字典foo方式词典fixed
1条回答
网友
1楼 · 发布于 2024-10-02 16:20:50

可以将itertools.groupby与递归一起使用:

import itertools
def group(_input):
  d = list(itertools.chain(*list(map(lambda x:list(x.items()), _input))))      
  _s = [[a, [c for _, c in b]] for a, b in itertools.groupby(sorted(d, key=lambda x:x[0]), key=lambda x:x[0])]
  return {a:group(b) if all(isinstance(i, dict) for i in b) else list(itertools.chain(*b)) for a, b in _s}

print(group([a, b, c]))

输出:

^{pr2}$

相关问题 更多 >