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

如何用dict.values()获取字典前3个值?解决下标不可用报错

解决 TypeError: 'dict_values' object is not subscriptable 问题

嘿,这个坑我之前踩过!先给你说清楚原因:在Python 3里,dict.values()返回的是一个动态的字典视图对象(dict_values类型),它的作用是实时反映字典的变化,但它并不支持像列表那样的直接切片操作,这就是你报错的根源。

下面给你两种靠谱的解决方案,按需选择:

方案1:转换为列表后切片(最直观)

把dict_values对象转换成列表,之后就能用熟悉的切片语法获取前3个值了。如果需要集合格式的结果,再转成set就行:

# 先修正字典的键(注意键要加引号,不然会被当成变量)
my_dict = {'Ages': {'Ana':4, 'Eva':7, 'Paul':9, 'Ashley':2, 'Ken':12, 'Miley':23}}

# 转列表+切片,得到前3个值的列表
top_3_list = list(my_dict['Ages'].values())[:3]
# 转成你想要的集合格式
top_3_set = set(top_3_list)
print(top_3_set)  # 输出 {4, 7, 9}

小提醒:你原来的字典定义里,Ana、Eva这些键没有加引号,会被Python当成未定义的变量,运行时会触发NameError,记得补上引号哦!

方案2:用itertools.islice高效切片(适合大字典)

如果你的字典特别大,转换整个列表会占用较多内存,用itertools.islice可以直接对视图对象做切片,不需要一次性转换所有元素:

import itertools

my_dict = {'Ages': {'Ana':4, 'Eva':7, 'Paul':9, 'Ashley':2, 'Ken':12, 'Miley':23}}

# 直接对dict_values做切片,只取前3个元素
top_3_values = list(itertools.islice(my_dict['Ages'].values(), 3))
top_3_set = set(top_3_values)
print(top_3_set)  # 输出 {4, 7, 9}

两种方法都能得到你想要的{4,7,9}结果,选哪种看你的实际场景就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:27:52