我有两个字典列表:
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'}]
我该怎么办?
答案 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'}]