Я использую Odoo и хотел бы сравнить два словаря без использования какой-либо библиотеки. Это сравнение должно вернуть словарь с различиями. Итак, вот мои два словаря:
list1 = {
'Office Furniture':
[
{
'name': 'Office chairs can harm your floor: protect it.',
'qty': 3
},
]
}
list2 = {
'Office Furniture':
[
{
'name': 'Office chairs can harm your floor: protect it.',
'qty': 3
},
{
'name': '160x80cm, with large legs.',
'qty': 1
}
],
'Services':
[
{
'name': 'designing',
'qty': 1
}
]
}
Я хотел бы без какой-либо библиотеки получить различия между этими двумя словарями следующим образом:
differences = {
'Office Furniture':
[
{
'name': '160x80cm, with large legs.',
'qty': 1
}
],
'Services':
[
{
'name': 'designing',
'qty': 1
}
]
}
Большое спасибо за вашу помощь !
def compare_dictionaries(dict1, dict2):
diff_dict = {}
for key in dict1.keys():
if key not in dict2:
diff_dict[key] = (dict1[key], None)
elif dict1[key] != dict2[key]:
diff_dict[key] = (dict1[key], dict2[key])
for key in dict2.keys():
if key not in dict1:
diff_dict[key] = (None, dict2[key])
return diff_dict
и, возможно, вам нужно переименовать свои дикты)
Этот код перебирает каждую пару ключ-значение в list2
. Для каждого ключа проверяется два случая.
СЛУЧАЙ I: существует ли ключ в list1
или нет. Если нет, то он добавляет весь список значений в словарь differences
под тем же ключом.
СЛУЧАЙ II: Если ключ существует как в list1
, так и в list2
, то он будет перебирать каждый элемент в списке значений. Для каждого элемента проверяется, существует ли этот элемент в соответствующем списке в list1
. Если нет, он добавляет этот элемент в словарь differences
под тем же ключом.
for key, value in list2.items():
# Check if the key exists in list1
if key not in list1:
differences[key] = value
else:
# Check each item in the value list
for item in value:
# Check if the item exists in list1
if item not in list1[key]:
if key not in differences:
differences[key] = []
differences[key].append(item)