{"id":1518,"date":"2023-02-28T16:46:53","date_gmt":"2023-02-28T08:46:53","guid":{"rendered":"http:\/\/175.24.184.226\/?p=1518"},"modified":"2023-02-28T16:46:53","modified_gmt":"2023-02-28T08:46:53","slug":"python%e8%ae%a1%e7%ae%97%e5%ad%97%e5%85%b8%e7%9a%84%e5%b7%ae%e5%80%bc","status":"publish","type":"post","link":"\/?p=1518","title":{"rendered":"python:\u8ba1\u7b97\u5b57\u5178\u7684\u5dee\u503c"},"content":{"rendered":"<pre><code class=\"language-python\"># -*- coding: UTF-8 -*-\n&quot;&quot;&quot;=========================================================\n@Project -&gt; File: \u6570\u636e\u7248\u672c\u7edf\u8ba1 -&gt; get_json_diff\n@IDE: PyCharm\n@author: lxc\n@date: 2023\/2\/27 \u4e0a\u5348 11:06\n@Desc:\n1-\u529f\u80fd\u63cf\u8ff0\uff1a\n\u6bd4\u5bf9\u4e24\u4e2a\u5b57\u5178\u7684\u5dee\u522b\uff0c\u8fd4\u56de\u540e\u8005\u51cf\u53bb\u524d\u8005\u7684\u7684\u503c\uff0c\u5b57\u5178\u5f62\u72b6\u4e0d\u53d8\n\u6ce8\u610f\uff1a\n 1. \u4e24\u5b57\u5178\u5f62\u72b6\u5fc5\u987b\u76f8\u540c\uff1b\n 2. \u4e24\u5b57\u5178\u7684\u503c\u5fc5\u987b\u5747\u4e3aint\u7c7b\u578b\u6216\u6570\u5b57\u5b57\u7b26\u4e32(99\u548c&#039;99&#039;\u5747\u53ef)\n2-\u5b9e\u73b0\u6b65\u9aa4\n    1-\u8bbe\u7acb\u6a21\u677f\u5b57\u5178\uff0c\u5f62\u72b6\u548c\u4e24\u5b57\u5178\u76f8\u540c\uff0c\u4e14value\u5747\u6539\u4e3a0\n    2-\u4f7f\u7528dictdiffer\u5e93\uff0c\u627e\u51fa\u4e24\u4e2a\u5b57\u5178\u7684\u5dee\u522b\u6240\u5728\uff0c\u5e76\u5c06value\u6c42\u5dee\uff0c\u586b\u5145\u8fdb\u6a21\u677f\u5b57\u5178\u5185\n&quot;&quot;&quot;\nimport copy\nfrom dictdiffer import diff\nimport logging\n\nlogger = logging.getLogger(__name__)\n\ndef get_differences(first, second):\n    differences = list(diff(first, second))\n    dic = change_value_to_zero(second)\n    while True:\n        break\n    for item in differences:\n        string = &quot;dic&quot;\n        try:\n            value = int(item[2][1]) - int(item[2][0])\n        except Exception as e:\n            logger.error(f&quot;{item[1]}:::\u8be5\u952e\u5bf9\u5e94\u7684value\u975eint\u7c7b\u578b\uff0c\u65e0\u6cd5\u8fdb\u884c\u6c42\u5dee\u503c\\\\\\n{e}&quot;)\n            value = None\n        if type(item[1]) == str:\n            key_chains = item[1].split(&#039;.&#039;)\n            string += &#039;&#039;.join([f&quot;[&#039;{key}&#039;]&quot; for key in key_chains]) + &quot; = %s&quot; % value\n        elif type(item[1]) == list:\n            key_chains = item[1]\n            for key in key_chains:\n                if type(key) == str:\n                    string += f&quot;[&#039;{key}&#039;]&quot;\n                elif type(key) == int:\n                    string += f&quot;[{key}]&quot;\n                else:\n                    raise TypeError(&quot;\u627e\u5dee\u503c\u5b58\u5728\u952e\u7c7b\u578b\u9519\u8bef: \u975e\u5b57\u7b26\u4e32\u6216\u5217\u8868&quot;)\n            string += &quot; = %s&quot; % value\n        else:\n            raise TypeError(&quot;\u627e\u5dee\u503c\u5b58\u5728\u952e\u7c7b\u578b\u9519\u8bef: \u975e\u5b57\u7b26\u4e32\u6216\u5217\u8868&quot;)\n        exec(string)\n    return dic\n\ndef get_targe_value(request_body):\n    # \u5faa\u73af\u5b57\u5178\uff0c\u83b7\u53d6\u952e\u3001\u503c\n    for key, values in request_body.items():\n        # \u5224\u65ad\u503c\u7684type\u7c7b\u578b\uff0c\u5982\u679c\u662flist,\u8c03\u7528get_list() \u51fd\u6570\uff0c\n        if type(values) == list:\n            get_list(values)\n        # \u5982\u679c\u662f\u5b57\u5178\uff0c\u8c03\u7528\u81ea\u8eab\n        elif type(values) == dict:\n            get_targe_value(values)\n        # \u5982\u679c\u503c\u4e0d\u662flist\u4e14\u662f\u9700\u8981\u88ab\u66ff\u6362\u7684\uff0c\u5c31\u66ff\u6362\u6389\n        elif type(values) != list and type(values) == int:\n            request_body[key] = 0\n        else:\n            pass\n\ndef get_list(values):\n    for rustle in values:\n        if type(rustle) == list:\n            get_list(values)\n        else:\n            get_targe_value(rustle)\n\ndef change_value_to_zero(item):\n    result = copy.deepcopy(item)\n    get_targe_value(result)\n    return result\n\nif __name__ == &#039;__main__&#039;:\n    dict2 = {&quot;num_industries&quot;: {&quot;9-\u6c7d\u8f66\u53ca\u96f6\u90e8\u4ef6&quot;: [{&quot;30-\u667a\u80fd\u5bb6\u7535&quot;: &quot;848645&quot;}, {&quot;11-\u6fc0\u5149\u88c5\u5907&quot;: 2795}, {\n        &quot;30-\u667a\u80fd\u5bb6\u7535&quot;: [{&quot;30-\u667a\u80fd\u5bb6\u7535&quot;: 9168}, {&quot;11-\u6fc0\u5149\u88c5\u5907&quot;: 2799}, {&quot;30-\u667a\u80fd\u5bb6\u7535&quot;: 9164}]}], &quot;30-\u667a\u80fd\u5bb6\u7535&quot;: 9163,\n                                &quot;11-\u6fc0\u5149\u88c5\u5907&quot;: 2795, &quot;12-\u819c\u6750\u6599&quot;: 1356, &quot;32090001-\u96c6\u6210\u7535\u8def&quot;: 416,\n                                &quot;29-\u755c\u79bd\u548c\u6c34\u4ea7\u54c1\u7cbe\u6df1\u52a0\u5de5&quot;: 6506, &quot;8-\u529f\u80fd\u73bb\u7483&quot;: 7742, &quot;19-\u5316\u5b66\u7ea4\u7ef4&quot;: 4668,\n                                &quot;32-\u9020\u7eb8&quot;: 967,\n                                &quot;18-\u5927\u6570\u636e+\u4ea7\u4e1a\u94fe&quot;: 10569, &quot;27-\u7eff\u8272\u5efa\u6750&quot;: 9407, &quot;14-\u96c6\u6210\u7535\u8def&quot;: 21250,\n                                &quot;24-\u7eba\u7ec7\u670d\u88c5&quot;: 10802,\n                                &quot;28-\u534a\u56fa\u6001\u6210\u578b\u5236\u9020&quot;: 9210, &quot;22-\u917f\u9020\uff08\u9152\uff09&quot;: 8956, &quot;32060001-\u5357\u901a\u5149\u7535&quot;: 0,\n                                &quot;23-\u98df\u54c1\u52a0\u5de5&quot;: 10502, &quot;10-\u751f\u7269\u533b\u836f&quot;: 745827, &quot;31-\u7f51\u7edc\u53ef\u89c6\u5316&quot;: 1205,\n                                &quot;26-\u9ad8\u7aef\u5bb6\u5c45&quot;: 10874,\n                                &quot;21-\u6709\u673a\u65b0\u6750\u6599&quot;: 12900, &quot;20-\u6676\u7845\u5149\u4f0f&quot;: 16825, &quot;25-\u7535\u5b50\u5143\u5668\u4ef6&quot;: 14848,\n                                &quot;15-\u52a8\u529b\u7535\u6c60&quot;: 9595},\n             &quot;total_num&quot;: 26304548}\n    dict1 = {&quot;num_industries&quot;: {&quot;9-\u6c7d\u8f66\u53ca\u96f6\u90e8\u4ef6&quot;: [{&quot;30-\u667a\u80fd\u5bb6\u7535&quot;: 9168}, {&quot;11-\u6fc0\u5149\u88c5\u5907&quot;: 2799}, {\n        &quot;30-\u667a\u80fd\u5bb6\u7535&quot;: [{&quot;30-\u667a\u80fd\u5bb6\u7535&quot;: 9148}, {&quot;11-\u6fc0\u5149\u88c5\u5907&quot;: 2793}, {&quot;30-\u667a\u80fd\u5bb6\u7535&quot;: 9134}]}], &quot;30-\u667a\u80fd\u5bb6\u7535&quot;: 9163,\n                                &quot;11-\u6fc0\u5149\u88c5\u5907&quot;: 2795, &quot;12-\u819c\u6750\u6599&quot;: 1356, &quot;32090001-\u96c6\u6210\u7535\u8def&quot;: 416,\n                                &quot;29-\u755c\u79bd\u548c\u6c34\u4ea7\u54c1\u7cbe\u6df1\u52a0\u5de5&quot;: 6506, &quot;8-\u529f\u80fd\u73bb\u7483&quot;: 7742, &quot;19-\u5316\u5b66\u7ea4\u7ef4&quot;: 4668,\n                                &quot;32-\u9020\u7eb8&quot;: 967,\n                                &quot;18-\u5927\u6570\u636e+\u4ea7\u4e1a\u94fe&quot;: 10569, &quot;27-\u7eff\u8272\u5efa\u6750&quot;: 9407, &quot;14-\u96c6\u6210\u7535\u8def&quot;: 21250,\n                                &quot;24-\u7eba\u7ec7\u670d\u88c5&quot;: 10802,\n                                &quot;28-\u534a\u56fa\u6001\u6210\u578b\u5236\u9020&quot;: 9210, &quot;22-\u917f\u9020\uff08\u9152\uff09&quot;: 8956, &quot;32060001-\u5357\u901a\u5149\u7535&quot;: 0,\n                                &quot;23-\u98df\u54c1\u52a0\u5de5&quot;: 10502, &quot;10-\u751f\u7269\u533b\u836f&quot;: 745827, &quot;31-\u7f51\u7edc\u53ef\u89c6\u5316&quot;: 1205,\n                                &quot;26-\u9ad8\u7aef\u5bb6\u5c45&quot;: 10874,\n                                &quot;21-\u6709\u673a\u65b0\u6750\u6599&quot;: 12900, &quot;20-\u6676\u7845\u5149\u4f0f&quot;: 16818, &quot;25-\u7535\u5b50\u5143\u5668\u4ef6&quot;: 14848,\n                                &quot;15-\u52a8\u529b\u7535\u6c60&quot;: 9595},\n             &quot;total_num&quot;: 26304539}\n    print(dict1)\n    print(dict2)\n    result = get_differences(dict1, dict2)\n    print(result)\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p># -*- coding: UTF-8 -*- &quot;&quot;&quot;==========================   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[53],"tags":[],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1518"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1518"}],"version-history":[{"count":1,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1518\/revisions"}],"predecessor-version":[{"id":1519,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1518\/revisions\/1519"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1518"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}