繁体   English   中英

两个字典的递归比较,需要帮助来理解代码

[英]Recursive compare of two dictionaries, need help understanding code

我不是python的佼佼者,我一直在慢慢地教自己,所以请原谅我缺乏知识。 这段代码是在这里找到的代码的略微修改版本( 两个python字典(键和值)的递归差异

我对它的注释中列出的功能有一些疑问。

def dd(d1, d2): 
    for k in d1: 
        if k not in d2: ##if the key from dict1 is not in dict2
            print k + " removed from d2"
    for k in d2:
        if k not in d1: ##if the key from dict2 is not in dict 1
            print k + " added in d2"
            continue
        if d2[k] != d1[k]: ## if dict 2 values are not the same as the values in dict 1
            if type(d2[k]) not in (dict, list): ## ???
                print k + " changed in d2 to " + str(d2[k])
            else:
                if type(d1[k]) != type(d2[k]): ## ???
                    print k + " changed to " + str(d2[k])
                    continue
                else:
                    if type(d2[k]) == dict: ## if dict2 values are in dict format?? 
                        dd(d1[k], d2[k]) ## pass dict1 / dict 2 values through the function again,  what is the purpose of this?
                        continue
    return

关于代码的输出,我还有另一个问题。 如果我将以下代码用作d1。

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": [
                            "GML",
                            "XML"
                        ]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

并将ID的值更改为“ 1234”,然后将该文件用作d2。 dd(d1,d2)将输出:

"ID changed in d2 to 1234"

这正是我从代码中期望的结果(键+在d2中更改为“ +值”)

我想尝试将输出更改为类似于在github上更新文件时的输出,因此更容易查看更改内容和位置,例如:

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
-                   "ID": "SGML",
+                   "ID": "1234",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": [
                            "GML",
                            "XML"
                        ]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

我将不得不拿两个字典,并比较两个,但我不知道如何处理输出。

尝试查看'difflib'( http://docs.python.org/2/library/difflib.html )。您可以对字典的字符串/漂亮打印表示形式进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM