我想在 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]
and 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)
首先,您应该修复 dict 键并将它们括在引号中。
然后您可以使用生成器表达式来查找项目,例如:
print('initial dict:')
pprint.pprint(data_from_frontend)
for item in result_from_query:
item_found = next((i for i in data_from_frontend if i['barcode'] == item['barcode']), False)
if item_found:
item_found['name'] = item['name']
print('dict after search:')
pprint.pprint(data_from_frontend)
将产生:
initial dict:
[{'barcode': '1', 'name_en': 'milk'},
{'barcode': '2', 'name_en': 'water'},
{'barcode': '3', 'name_en': 'cheese'},
{'barcode': '10', 'name_en': 'pepsi'}]
dict after search:
[{'barcode': '1', 'name': 'PID012343', 'name_en': 'milk'},
{'barcode': '2', 'name': 'PID123454', 'name_en': 'water'},
{'barcode': '3', 'name_en': 'cheese'},
{'barcode': '10', 'name': 'PID123432', 'name_en': 'pepsi'}]
False
在生成器中使用将避免在按目标字典中不存在的条形码值进行搜索时出错。
PSpprint
如果你想使用它不要忘记导入
PPS并确保您可以使用相同的逻辑创建新的 dict 而不是修改现有的
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句