Как сравнить два списка словарей (JSON) в Python и вывести только изменения между ними? - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно сравнить следующие списки:

Old list:
[
    {
        "dns-a": [
            "107.180.51.238",
            "107.180.51.238"
        ],
        "dns-aaaa": [],
        "domain-name": "raz.com",
        "fuzzer": "original*"
    },
    {
        "dns-a": [
            "69.172.200.131",
            "69.172.200.131"
        ],
        "dns-aaaa": [],
        "domain-name": "raza.com",
        "fuzzer": "addition"
    },
]

New List:
[
    {
        "dns-a": [
            "107.180.51.238",
            "107.180.51.238"
        ],
        "dns-aaaa": [],
        "domain-name": "raz.com",
        "fuzzer": "original*"
    },
    {
        "dns-a": [
            "69.172.200.131",
            "69.172.200.131"
        ],
        "dns-aaaa": [],
        "domain-name": "raza.com",
        "fuzzer": "addition"
    },
    {
        "dns-a": [
            "104.224.184.187",
            "104.224.184.187"
        ],
        "dns-aaaa": [],
        "domain-name": "razb.com",
        "fuzzer": "addition"
    }
]

The output should be:
        {
            "dns-a": [
                "104.224.184.187",
                "104.224.184.187"
            ],
            "dns-aaaa": [],
            "domain-name": "razb.com",
            "fuzzer": "addition"
        }

Я пробовал следующее:

def Diff(old_list, new_list): 
    list_dif = [i for i in old_list + new_list if i not in old_list or 
    i not in new_list]
    return list_dif

Когда списки совпадают, я получаю ответ, что ничто не отличается, ноесли что-то отличается, я получаю обратно весь список.

Какие у меня есть варианты, чтобы сделать это правильно? Я смотрел на подобные решения, но ни одно из них не помогло мне.

1 Ответ

0 голосов
/ 30 октября 2019

Попробуйте это:

difference = filter(lambda x: x not in old_list, new_list) + filter(lambda x: x not in new_list, old_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...