如何保留两个Python字典的共同键条目?求更简洁实现方案
问题:保留两个字典的共有键条目,移除非匹配条目
需求是移除两个字典dict_a和dict_b中所有键不匹配的条目,仅保留两者共有的键对应的条目。示例如下:
dict_a = {'key1': 'x1', 'key2': 'y1', 'key4': 'z1'} dict_b = {'key1': 'x2', 'key3': 'y2', 'key4': 'w1'} # 处理后: # dict_a = {'key1': 'x1', 'key4': 'z1'} # dict_b = {'key1': 'x2', 'key4': 'w1'}
当前实现代码:
keep_keys = [keyA for keyA in dict_a.keys() if keyA in dict_b.keys()] for i in dict_b.copy().keys(): if i not in keep_keys: del dict_b[i] for i in dict_a.copy().keys(): if i not in keep_keys: del dict_a[i]
寻求更简洁、符合Python风格的实现方式。
简洁的Pythonic实现方式
方法1:字典推导式生成新字典
字典推导式是Python中构建字典最简洁的方式之一,结合集合交集操作快速过滤出共有键:
# 用集合交集获取两个字典的共有键 common_keys = dict_a.keys() & dict_b.keys() # 生成只保留共有键的新字典 dict_a = {k: dict_a[k] for k in common_keys} dict_b = {k: dict_b[k] for k in common_keys}
字典的keys()方法返回的视图对象原生支持集合运算,&操作符直接取交集,比列表推导式的成员判断更高效。
方法2:原地修改原字典
如果需要直接修改原字典而非生成新对象,可以结合集合交集和pop()方法:
common_keys = dict_a.keys() & dict_b.keys() # 遍历dict_a的键列表(转成list避免遍历中修改字典报错) for k in list(dict_a.keys()): if k not in common_keys: dict_a.pop(k) # 同理处理dict_b for k in list(dict_b.keys()): if k not in common_keys: dict_b.pop(k)
内容的提问来源于stack exchange,提问作者user2453382
相关产品推荐
相关产品推荐

