我有两个dict列表
listA = [{'id': 'abc', 'key1': '542696d8485b'}]
listB = [{'id': 'abc', 'key1': '542696d8485b'}, {'id': 'def', 'key1': '27348628grn'}]
我想提取listC = [{'id': 'abc', 'key1': '542696d8485b'}]
即我想找到基于' id'字段(基于任何一个字段,假设列表中的公共项完全相同)。建议我一些有效的pythonic方式...
像
这样的东西listA_set = set(item['id'] for item in listA)
listB_set = set(item['id'] for item in listB)
listC_set = listA_set & listB_set
listC = {item:listA[item] for item in listC_set}
答案 0 :(得分:7)
为什么不使用列表理解:
listA = [{'id': 'abc', 'key1': '542696d8485b'}]
listB = [{'id': 'abc', 'key1': '542696d8485b'}, {'id': 'def', 'key1': '27348628grn'}]
print [i for i in listA for j in listB if i['id']==j['id']]
答案 1 :(得分:1)
您可以使用简单的过滤
b_ids = set(d["id"] for d in listB)
result = [d for d in listA if d["id"] in b_ids]
假设您希望在listA
中具有相同"id"
值的可能不同的字典时保留字典listB
。
答案 2 :(得分:1)
我会创建两个集合并使用交集创建一个新字典
d1 = {'a' : 1}
d2 = {'a' : 4, 'b' : 7}
s1 = set(d1.keys())
s2 = set(d2.keys())
s3 = s2.intersection(s1)
d3 = {e:d1[e] for e in s3}
另一件事,你真正需要的是用另一个字典更新一个字典,使用
d1.update(d2)