当前位置: 首页 > 面试题库 >

Python-词典合并

范俊逸
2023-03-14
问题内容

我需要合并多个词典,例如:

dict1 = {1:{"a":{A}}, 2:{"b":{B}}}

dict2 = {2:{"c":{C}}, 3:{"d":{D}}

随着A B C和D作为树的叶子像{"info1":"value", "info2":"value2"}

词典的级别(深度)未知,可能是 {2:{"c":{"z":{"y":{C}}}}}

在我的情况下,它代表目录/文件结构,其中节点为docs,而节点为文件。

我想将它们合并以获得:

 dict3 = {1:{"a":{A}}, 2:{"b":{B},"c":{C}}, 3:{"d":{D}}}

我不确定如何使用Python轻松做到这一点。


问题答案:

这实际上是非常棘手的-特别是如果你希望在事物不一致时收到有用的错误消息,同时正确地接受重复但一致的条目(这里没有其他答案了……)。

假设你没有大量的条目,那么递归函数是最简单的:

def merge(a, b, path=None):
    "merges b into a"
    if path is None: path = []
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                merge(a[key], b[key], path + [str(key)])
            elif a[key] == b[key]:
                pass # same leaf value
            else:
                raise Exception('Conflict at %s' % '.'.join(path + [str(key)]))
        else:
            a[key] = b[key]
    return a

# works
print(merge({1:{"a":"A"},2:{"b":"B"}}, {2:{"c":"C"},3:{"d":"D"}}))
# has conflict
merge({1:{"a":"A"},2:{"b":"B"}}, {1:{"a":"A"},2:{"b":"C"}})

请注意,这会发生变化a-将的内容b添加到a(也会返回)。如果你想保留a,可以这样称呼merge(dict(a), b)

agf指出(如下),你可能有两个以上的命令,在这种情况下,你可以使用:

reduce(merge, [dict1, dict2, dict3...])

一切都将添加到dict1中。

[注意-我编辑了最初的答案以使第一个参数发生变化;使“减少”更易于解释]

python 3中的ps,你还需要 from functools import reduce



 类似资料:
  • 问题内容: 给定一个像这样的字典: 如何创建一个字典列表,该列表结合了第一个字典键的各种值?我想要的是: 问题答案: 我认为您想要笛卡尔积,而不是排列,在这种情况下可以提供帮助:

  • 问题内容: 我正在尝试拼合嵌套的字典: 我想显示列表中的所有值:[4、6、3、23、3、45、2、0、6、1、2、3,…,2、10、8] 我的第一个想法是这样做: 虽然我得到了错误。我很乐意提供处理技巧。 问题答案: 您可以如下使用简单的递归函数。

  • 是否有可能在Python中创建字典理解(用于键)? 如果没有列表理解,您可以使用以下内容: 我们可以将其缩短为列表理解:。 但是,假设我想将字典的键设置为相同的值。我可以做到: 我试过这个: 但是,我在的 的

  • 基础教程介绍了基本概念,特别是对象和类。 进阶教程对基础教程的进一步拓展,说明Python的细节。希望在进阶教程之后,你对Python有一个更全面的认识。 之前我们说了,列表是Python里的一个类。一个特定的表,比如说nl = [1,3,8],就是这个类的一个对象。我们可以调用这个对象的一些方法,比如 nl.append(15)。 我们要介绍一个新的类,词典 (dictionary)。与列表相似

  • 本文向大家介绍Python合并字典,包括了Python合并字典的使用技巧和注意事项,需要的朋友参考一下 示例 考虑以下字典: Python 3.5+ 如本示例所示,重复的键映射到它们的最后一个值(例如,“ Clifford”覆盖“ Nemo”)。 Python 3.3以上 使用此技术,给定键的最前值优先,而不是最后一个(“ Clifford”被抛弃,取而代之的是“ Nemo”)。 Python 2

  • 问题内容: 我正在尽全力解决这个问题,但是不够灵活。 在我的Python脚本中,我有一个字典列表字典。(实际上,它会更深入一点,但该级别不涉及此问题。)我想将所有这些内容整理成一个很长的列表,扔掉所有的字典键。 因此我想转型 至 我可能可以设置一个map-reduce来迭代外部词典的各项,以从每个子词典构建一个子列表,然后将所有子列表连接在一起。 但这对于大型数据集似乎效率不高,因为中间的数据结构