匹配两个字典列表后构造一个字典列表

时间:2019-02-17 18:14:00

标签: python-3.x

我有这两个字典,如下所示:

src_dict = [{"id": 111, "name": "sam"}, {"id": 333, "name": "name_changed_to_not_ross"}, {"id": 444, "name": "jack"}]

dest_dict = [{"rec_id":"abc","fields":{"id":111,"name":"sam"}}, 
                {"rec_id":"pqr","fields":{"id":222,"name":"john"}},
                 {"rec_id":"xyz","fields":{"id":333,"name":"ross"}}]

我需要创建一个插入和更新列表,但格式不同。创建更新列表时,我需要从两个字典列表中获取相应的值。 (使用blhsing方法可以,但无法获得完整的结果)

ids = {d['fields']['id'] for d in dest_dict}
records_update = [d for d in src_dict if d['id'] in ids]
records_insert = [d for d in src_dict if d['id'] not in ids]

这是结果

records_insert(这很好)

[{'id': 444, 'name': 'jack'}]

records_update(这是问题)

[{'id': 111, 'name': 'sam'}, {'id': 333, 'name': 'ross'}]

这是我在records_update中期望的输出:

records_update(预期输出)

[{'rec_id': 'abc', 'fields': {'id': 111, 'name': 'sam'}},
 {'rec_id': 'xyz', 'fields': {'id': 333, 'name': 'name_changed_to_not_ross'}}]

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您的订单错了。

ids = {d['id'] for d in src_dict}
records_update = [d for d in dest_dict if d['fields']['id'] in ids]

>>> records_update
[{'rec_id': 'abc', 'fields': {'id': 111, 'name': 'sam'}}, {'rec_id': 'xyz', 'fields': {'id': 333, 'name': 'ross'}}]