我想比较python中的两个字典列表,我有一个从前端发送的列表,一个查询结果存储在同一函数中,所以我要做的就是比较两个列表和键{{1} },如果它们匹配,我想将第二个字典中的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
答案 0 :(得分:1)
首先,您应该修复字典键并将其用引号引起来。
然后,您可以使用generator expression查找项目,例如:
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
可以避免在目标字典中不存在的条形码值搜索时发生错误。
PS 如果要使用pprint
,请不要忘记导入
P.P.S。,并确保您可以使用相同的逻辑创建新的dict而不是修改现有的
答案 1 :(得分:0)
您的条形码匹配结果可以像这样获得。
barcode = 'barcode'
name_en = 'name_en'
name = 'name'
matching_result = data_from_frontend[:] #get a copy of front end data to use as the output
for i in range(len(data_from_frontend)):
for j in range(len(result_from_query)):
if(data_from_frontend[i][barcode] == result_from_query[j][barcode]):
matching_result[i][name] = result_from_query[j][name]
break
print(matching_result)