У меня есть 2 списка диктов, которые мне нужно сравнить и вывести разницу для отчета
Мне нужно:
- Проверьте new_list по старому списку для новых записей (записей, которые существуют в new_list, но не в old_list) и добавьте их в updated_list
- Игнорировать совпадающие записи (все ключи, значения совпадают)
- Найти совпадающие записи с другим событием 15 или событием 16 и обновить событие с помощью разности 2 значений
- Вывод результатов в новый список диктовок (в этом примере updated_list)
Для обработки:
new_list = [
{'datetime': '2018-08-01', 'evar1': 'newRecord', 'event16': '100', 'event15': '200'},
{'datetime': '2018-08-02', 'evar1': 'duplicateRecord', 'event16': '10', 'event15': '20'},
{'datetime': '2018-08-03', 'evar1': 'diffEvent', 'event16': '15', 'event15': '25'}
]
old_list = [
{'datetime': '2018-08-02', 'evar1': 'duplicateRecord', 'event16': '10', 'event15': '20'},
{'datetime': '2018-08-03', 'evar1': 'diffEvent', 'event16': '10', 'event15': '25'}
]
Результаты должны выглядеть следующим образом:
updated_list = [
{'datetime': '2018-08-01', 'evar1': 'newRecord', 'evar3': 'site', 'event16': '100', 'event15': '200'},
{'datetime': '2018-08-03', 'evar1': 'diffEvent', 'evar3': 'site', 'event16': '5', 'event15': '25'}
]
Я пробовал это:
updated_list = []
for new_item in new_list:
for old_item in old_list:
for key, value in new_item.iteritems():
# If values don't match, subtract old_list value from new_list values and append the diff
if any(ko == key for ko, vo in old_item.iteritems()):
ko, vo = [(ko, vo) for (ko, vo) in old_item.iteritems() if ko == key][0]
if vo != value:
new_value = value - vo
new_item.update({ko: new_value})
updated_list.append(new_item)
else:
# If record does not exist in old_list, append the new record
updated_list.append(new_item)