Python3: Как сравнить данные двух словарей, которые являются вложенными и динамическими по своей природе? - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь найти способ сравнить два словаря без какой-либо библиотеки, но данные вложены и ключи не упорядочены тоже. Данные являются динамическими по своей природе, то есть ключи в словаре изменятся и также будут вложенными.Я не могу разобрать словарь, если вложенность не фиксирована.

Пример данных:

source_data = {
    "name":"Kaleigh", "username":"Kaleigh60", "email":"Kaleigh6047@gmail.com",
    "address":{
        "street":"MyahCourse","suite":"Apt.657","city":"Boyerberg","zipcode":"66413-8920",
        "geo":{"lat":"-44.6203","lng":"16.7454"}
    },
    "website":"megane.biz",
    "friends":[
        {"name":"Little-Reinger","catchPhrase":"Enhancedregionalemulation"},
        {"name":"Big-Reinger","catchPhrase":"emulation"}
    ],
    "Numbers":[1,2,3,4]
}

destination_data = {
    "name":"Kaligh", "username": "Kaleigh60", "email": "Kaleigh6047@gmail.com",
    "address":{
        "street":"GoldCourse", "suite":"Apt.657", "city":"Boyerberg",
        "zipcode":"66413-8920",
        "geo":{"lat":"-44.6203","lng":"16.7454"}
    },
    "website":"megane.biz",
    "friends":[
        {"name":"Reinger", "catchPhrase":"Enhancedregionalemulation"},
        {"name":"Big-Reinger","catchPhrase":"emulation"}
    ],
    "Numbers":[4,2,1,5]
}

Я не могу понять, как я могу разобрать и сравнить словарь?Ожидаемый результат: ключи, значение которых отличается и значения в виде списка [srcvalue,destvalue] например,

{
    "friends[1].name": ["Big-Reinger", "Bigger-Reinger"],
    "name":["Kaleigh","Kaligh"],
    "Numbers[2]":[3,1],
    "Numbers[3]":[4,5],
    "friends[0].name":["Little-Reinger","Reinger"],
    "Numbers[0]":[1,4],
    "address.street":["MyahCourse","GoldCourse"]
}

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Встроенный оператор равенства для dict уже рекурсивно сравнивает вложенные значения dict.

>>> a={1:2,3:4,2:{2:4}}
>>> b={3:4,2:{2:4},1:2}
>>> a==b
True
>>> b={3:4,2:{2:3},1:2}
>>> a==b
False
>>>
0 голосов
/ 24 сентября 2018

С здесь

Вы можете сравнить два словаря на основе таких значений:

for x_values, y_values in zip(source_data.iteritems(), destination_data.iteritems()):
        if x_values == y_values:
            # Matched
        else:
            # Not Matched
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...