Я хочу сравнить два списка словарей в Python, у меня есть список, отправленный из внешнего интерфейса, и результат запроса, сохраненный в одной и той же функции, поэтому все, что я хочу, это сравнить оба списка с ключом barcode
иесли они совпадают, я хочу добавить name
из второго словаря в первый
, например:
data_from_frontend = [
{ barcode: '1', name_en: 'milk' },
{ barcode: '2', name_en: 'water' },
{ barcode: '3', name_en: 'cheese' },
{ barcode: '10', name_en: 'pepsi' },
]
result_from_query = [
{ barcode: '1', name: 'PID012343' },
{ barcode: '2', name: 'PID123454' },
{ barcode: '10', name: 'PID123432' },
]
Я хочу сравнить оба списка и по barcode
и если они совпадают, я хочу объединить пару обеих переменных в новую + добавить одну, которая не соответствует другому списку, так что результатом будут две новые переменные с [matched + name]
и not_found
,как мне этого добиться?
Вот что я пробовал
equal = []
not_equal = []
no_barcode = []
x = [ { "age": "22" }, { "name": "John Doe" }, { "name": "Jane Doe" }, { "name": "Doctor" }, { "name": "Engineer" } ]
y = [ { "name": "Engineer" }, { "name": "Jane Doe" }, { "name": "Doctor" } ]
x_sort = sorted(x, key=lambda k: ("name" not in k, k.get("name", None)))
y_sort = sorted(y, key=lambda k: ("name" not in k, k.get("name", None)))
print(y_sort)
for x_val in x_sort:
if "name" not in x_val.keys():
no_barcode.append(x_val)
else:
for y_val in y_sort:
if x_val["name"] == y_val["name"]:
equal.append(x_val)
mapped = map(lambda k: k["name"], y_sort)
if x_val["name"] not in mapped:
not_equal.append(x_val)
print('equal')
print(equal)
print('not equal')
print(not_equal)