【问题标题】:Is there a function in Python to find the diff between two dictionaries? [duplicate]Python中有一个函数可以找到两个字典之间的差异吗? [复制]
【发布时间】:2019-12-19 19:13:10
【问题描述】:

我正在寻找两个词典之间的差异。

[Dict. 1]
{"1":"w"},
{"2":"x"},
{"3":"y"}

[Dict. 2]
{"2":"b"},
{"3":"y"},
{"4":"z"}

我想找到能改变 Dict 的差异。 2 到与 Dict 相同的字典中。 1

我不允许设置字典。 2 等于字典。 1.

我只能修改字典。 2 通过使用尽可能少的添加/更新/删除操作。 对于上面的例子,我的差异应该是这样的。

[Dict. 2]      [Diff]              [Dict. 2]
{"2":"b"},     add("1","w")        {"1":"w"},
{"3":"y"},  +  update("2","x")  =  {"2":"x"},
{"4":"z"}      remove("4")         {"3":"y"}

使用 Python,我如何找到这两个字典的差异?我的差异需要包含最少数量的添加、更新和删除。

【问题讨论】:

  • 欢迎来到 StackOverflow。 On topichow to ask 和 ...the perfect question 在此处申请。 StackOverflow 是针对特定 编程问题的知识库——不是设计、编码、研究或教程资源。如果您在浏览器中搜索“查找列表差异”,您会找到比我们在此处管理的更能解释这一点的参考资料。
  • @TrentonMcKinney 虽然它解决了我的部分问题,但它产生的差异本身并没有保留足够的信息来帮助我创建我正在寻找的差异

标签: python dictionary diff


【解决方案1】:

您可以尝试使用设置差异:

def transform_dicts(a, b):
    extra = set(dict_2.items()) - set(dict_1.items())
    missing = set(dict_1.items()) - set(dict_2.items())

    for key, val in extra:
        del b[key]

    for key, val in missing:
        b[key] = val

    return b

它不是特别简洁,但只需很少的操作即可完成。

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2016-12-31
    • 2016-03-21
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多