Python Сравните два конкретных словаря - PullRequest
0 голосов
/ 21 января 2019

Я хочу сравнить два конкретных словаря:

dict1 = {"person1": {
      "name": "toto",
      "age": 24
    }, 
    "person2": {
      "name": "titi",
      "age": 24}
    }

dict2 = {"person2": {
      "name": "tata",
      "age": 22
    }, 
    "person3": {
      "name": "tete",
      "age": 25}
    }

Я хочу сравнить разницу между: - человек1, человек2 (dict1) и человек2, человек3 (dict2) - если person2 одно и то же, и сравнить имя и возраст, если оно одинаковое или нет

Я уже сравниваю первый ключ, но значение второго ключа нет.

DICT1 - истинный словарь:

def not_matches(dict_one, dict_two):
    dict_one = set(dict_one)
    dict_two = set(dict_two)
    ldel, ladd = list(dict_two - dict_one), list(dict_one - dict_two)
    return ldel, ladd

list_delete = list()
list_add = list()

list_delete, list_add = not_matches(dict1, dict2)
print(list_delete)
print(list_add)

['person3']
['person1']

1 Ответ

0 голосов
/ 21 января 2019

Попробуйте следующим образом:

for k1, v1 in dict1.items():
  v2 = dict2.get(k1, None)
  if v2:
    print(k1, '---- found:')
    print(v1['name'], v2['name'])
    print(v1['age'], v2['age'])

Добавить настройку для сравнения вложенных ключей.


Для сравнения основных ключей в руки входит класс set:
keys1 = set(dict1.keys())
keys2 = set(dict2.keys())

print(keys1 - keys2) #=> {'person1'}
print(keys2 - keys1) #=> {'person3'}
print(keys1 & keys2) #=> {'person2'}

Таким образом, приведенный выше код можно изменить на:

for k in keys2 & keys1:
  d1, d2 = dict1[k], dict2[k]
  print ( (d1['name'] == d2['name']) & (d1['age'] == d2['age']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...