Python技术问题:如何提取字典中值相同的所有键值对?
解决字典中值相同的键值对提取问题
我懂你的痛点啦——你想从字典里找出所有值重复的键值对,但用dict(zip(b.values(),b.keys()))的方法只留下了每个重复值对应的最后一个键,完全不是你想要的结果。这其实是因为字典的键是唯一的,当你用值作为新字典的键时,后面出现的同值键会直接覆盖前面的,所以第一个(1,1)对应的'4'就被(2,1)给替换掉了,这就是你得到的结果里没有它的原因。
那咱们来写个正确的解法,核心思路是先把每个值对应的所有原键都收集起来,再筛选出那些有多个键的项,最后重新构建目标字典:
方法一:用collections.defaultdict简化操作
from collections import defaultdict b = {(1, 1): '4', (2, 1): '4',(3,1):'8',(4,2):'9',(2,4):'10'} # 第一步:构建「值 -> 对应所有键的列表」的映射 value_to_keys = defaultdict(list) for key, val in b.items(): value_to_keys[val].append(key) # 第二步:筛选出有多个键的项,构建结果字典 result = {} for val, keys in value_to_keys.items(): if len(keys) > 1: for key in keys: result[key] = val print(result) # 输出:{(1, 1): '4', (2, 1): '4'}
方法二:不用额外库,用普通字典实现
如果你不想导入collections,用基础字典也能搞定:
b = {(1, 1): '4', (2, 1): '4',(3,1):'8',(4,2):'9',(2,4):'10'} value_to_keys = {} for key, val in b.items(): # 如果值不在映射里,就初始化一个空列表 if val not in value_to_keys: value_to_keys[val] = [] value_to_keys[val].append(key) # 同样筛选并构建结果 result = {} for val, keys in value_to_keys.items(): if len(keys) > 1: for key in keys: result[key] = val print(result) # 输出:{(1, 1): '4', (2, 1): '4'}
这样就能精准提取出所有值重复的键值对啦~
内容的提问来源于stack exchange,提问作者user9538877
相关产品推荐
相关产品推荐

