如何用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
相关产品推荐
相关产品推荐

