Сравнение двух списков словарей и создание отфильтрованного списка словарей
есть два списка:
old_list = [{'good':'apple','from':'Amazon','to':'Avito','quantity': 103},
{'good':'orange','from':'Ozon','to':'Avito','quantity': 107},
{'good':'melon','from':'WB','to':'Ozon','quantity': 105},
{'good':'apple','from':'WB','to':'Avito','quantity': 107}]
new_list = [{'good':'orange','from':'Ozon','to':'Avito','quantity': 120},
{'good':'apple','from':'Amazon','to':'Avito','quantity': 104},
{'good':'banana','from':'Amazon','to':'WB','quantity': 110},
{'good':'apple','from':'WB','to':'Avito','quantity': 102}]
Входные списки содержат маршруты перевозки фруктов из одного магазина в другой. Нужна функция, которая сравнит эти списки и создаст отфильтрованный список маршрутов. Условия добавления маршрута в отфильтрованный список:
- совпадают значения по ключу 'good', 'from', 'to' и количество увеличилось на 5+ единиц,
- Новый маршрут, то есть маршрута нет в старом списке (old_list), (маршрут определяется товаром и двумя магазинами
Таким образом выходными данными функции будет список словарей:
filtered_list = [
{'good':'orange','from':'Ozon','to':'Avito','quantity': 120}, #изменилось количество больше чем на 5
{'good':'banana','from':'Amazon','to':'WB','quantity': 110} #новый маршрут
]
Отсеяли маршрут {'good':'apple','from':'Amazon','to':'Avito','quantity': 104}, так как увеличение количества менее 5 и {'good':'apple','from':'WB','to':'Avito','quantity': 101}, так как количество снизилось
Ответы (1 шт):
Автор решения: Ssssemyon
→ Ссылка
def filter_routes(old_list, new_list):
filtered_list = []
for new_route in new_list:
is_new_route = True
for old_route in old_list:
if new_route['good'] == old_route['good'] and new_route['from'] == old_route['from'] and new_route['to'] == old_route['to']:
if new_route['quantity'] > old_route['quantity'] + 5:
filtered_list.append(new_route)
is_new_route = False
break
if is_new_route:
filtered_list.append(new_route)
return filtered_list