比较python 2中的两个字典列表

时间:2019-05-05 11:31:14

标签: python python-2.7 list dictionary

我想比较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

2 个答案:

答案 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)