比较python 2中的两个dicts列表

阿卜杜勒-埃拉·JS

我想在 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

比较python中两个列表中的两个单词

来自分类Dev

Python-使用字典比较两个列表

来自分类Dev

比较python中的两个路径

来自分类Dev

比较python中的两个大列表

来自分类Dev

比较Mathematica中的两个列表

来自分类Dev

如何在python中比较两个列表

来自分类Dev

如何比较两个列表中的项目Python 3.3

来自分类Dev

比较python中两个列表的最佳算法

来自分类Dev

比较两个自定义列表python

来自分类Dev

比较Python中的两个未知列表

来自分类Dev

比较Scala中的两个列表

来自分类Dev

两个列表,在python中更快的比较

来自分类Dev

比较python中的两个列表并将结果保存在单独的列表中

来自分类Dev

在Python中使用Zip函数比较两个列表

来自分类Dev

如何在python中迭代比较两个列表?

来自分类Dev

两个列表的Python比较

来自分类Dev

Python中的两个列表比较

来自分类Dev

python迭代一个元组中的两个列表并比较tem之间的整数

来自分类Dev

Python-比较两个不同列表中的子列表

来自分类Dev

比较python中的两个大列表

来自分类Dev

Python:如何比较两个列表

来自分类Dev

比较Python中两个包含数组的列表

来自分类Dev

比较python中的两个列表并打印差异

来自分类Dev

比较Scala中的两个列表

来自分类Dev

Python:比较具有两个不同列表长度的列表中的字符串

来自分类Dev

Python:比较两个CSV列表

来自分类Dev

比较python中的两个变量列表

来自分类Dev

python - 比较两个列表

来自分类Dev

通过比较python中的两个嵌套列表生成0和1的嵌套列表