通过另一个字典列表中的键更新字典列表

时间:2020-04-28 16:05:53

标签: python list dictionary

我有两个字典列表:

a = [{'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}]
b = [{'id': 1, 'name': 'test'}, {'id': 2, 'name': 'test'}, {'id': 3, 'name': 'test'}, {'id': 4, 'name': 'test'}, {'id': 5, 'name': 'test'}]

我需要用键a'name'的字典中用键b更新'id'中的字典。我预期的结果:

a = [{'id': 1, 'name': 'test'}, {'id': 2, 'name': 'test'}, {'id': 3, 'name': 'test'}, {'id': 4, 'name': 'test'}]

我该怎么办?

3 个答案:

答案 0 :(得分:4)

您应该首先为列表C++中的词典创建一个“索引”,然后可以使用列表理解来更新列表C

std::vector<std::array<int, 2>> cartesianProduct(int sizeA, int sizeB) {
    std::vector<std::array<int, 2>> result(sizeA * sizeB);

    for (int i = 0; i < sizeA; ++i) {
        for (int k = 0; k < sizeB; ++k) {
            result[i * sizeB + k] = { i, k };
        }
    }
    return result;
}

答案 1 :(得分:2)

可能是一个filter进程,首先获取过滤器作用域列表并进行过滤器

a = [{'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}]
b = [{'id': 1, 'name': 'test'}, {'id': 2, 'name': 'test'}, {
    'id': 3, 'name': 'test'}, {'id': 4, 'name': 'test'}, {'id': 5, 'name': 'test'}]
print(list(filter(lambda x: x['id'] in [i['id'] for i in a], b)))

结果:

[{'id': 1, 'name': 'test'}, {'id': 2, 'name': 'test'}, {'id': 3, 'name': 'test'}, {'id': 4, 'name': 'test'}]

答案 2 :(得分:1)

a转换为一组ID以进行成员资格查找也是一种解决方案:

ids = {x["id"] for x in a}

result = [x for x in b if x["id"] in ids]

print(result)
# [{'id': 1, 'name': 'test'}, {'id': 2, 'name': 'test'}, {'id': 3, 'name': 'test'}, {'id': 4, 'name': 'test'}]