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

Python中反转字典访问值的正确方法?解决mypy类型报错

嘿,这两个问题我都碰到过,让我给你捋清楚解决方案:

问题1:Python中反转字典并访问其值的正确方式

首先得明确你说的“反转字典”是两种不同的需求,我分开给你说明:

需求1:互换字典的键和值(真正的“反转字典”)

如果你的字典值都是唯一的,用字典推导式就能快速搞定:

original_dict = {1: 'a', 2: 'b', 3: 'c'}
reversed_dict = {value: key for key, value in original_dict.items()}
# 访问值的方式和普通字典一样,比如 print(reversed_dict['a']) 会输出1

要是值有重复,上面的方法会覆盖掉之前的键,这时候可以用defaultdict把相同值对应的键存成列表:

from collections import defaultdict
original_dict = {1: 'a', 2: 'b', 3: 'a'}
reversed_dict = defaultdict(list)
for key, value in original_dict.items():
    reversed_dict[value].append(key)
# 访问值:print(reversed_dict['a']) 会得到 [1, 3]

需求2:按插入顺序倒序访问字典的值

如果只是想倒着遍历字典的值(不互换键值),分两种情况处理:

  • 对于Python 3.7及以上的普通字典(自带插入顺序保留),或者OrderedDict,可以把值转成列表再反转:
    original_dict = {1: 'a', 2: 'b', 3: 'c'}
    for val in reversed(list(original_dict.values())):
        print(val)  # 输出c、b、a
    
  • 或者倒序遍历键,再通过键取值,这种方式不用额外转列表,效率更高:
    for key in reversed(original_dict.keys()):
        print(original_dict[key])
    
问题2:解决OrderedDict值逆序遍历的mypy报错问题

你遇到的mypy报错是因为reversed()的类型定义里不支持直接接收ValuesView类型(虽然Python运行时能正常执行,但类型检查器不认)。这里有几个优雅的解决办法:

方法1:直接反转OrderedDict本身(推荐)

因为OrderedDict是有序容器,reversed(x)会直接返回倒序的键迭代器,我们直接通过键取值就行,既高效又符合类型规范:

from collections import OrderedDict
def main() -> None:
    x = OrderedDict([ (1, 'a'), (2, 'b'), (3, 'c'), ])
    for key in reversed(x):
        print(x[key])
if __name__ == '__main__':
    main()

方法2:显式把ValuesView转成列表

如果就想直接操作值的视图,只要显式转成列表,mypy就能识别类型了:

from collections import OrderedDict
def main() -> None:
    x = OrderedDict([ (1, 'a'), (2, 'b'), (3, 'c'), ])
    for y in reversed(list(x.values())):
        print(y)
if __name__ == '__main__':
    main()

方法3:反转键值对再提取值

也可以倒序遍历items()拿到键值对,忽略键直接取值:

from collections import OrderedDict
def main() -> None:
    x = OrderedDict([ (1, 'a'), (2, 'b'), (3, 'c'), ])
    for _, y in reversed(x.items()):
        print(y)
if __name__ == '__main__':
    main()

内容的提问来源于stack exchange,提问作者Christoph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:20:42