You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:44:53