问题描述

d = {1: 1, 2: 2}
print(d.values()[0])

报错 TypeError: 'dict_values' object does not support indexing

根据文档,由 dict.keys(), dict.values()dict.items() 返回的对象是视图对象,是一个动态视图,当字典改变时,视图也会相应改变。

因此无法直接按索引取值。




解决方案

d = {1: 1, 2: 2}
print(list(d.values())[0])
print(next(iter(d.values())))




对比

初始化数据,并使用Jupyter Notebook的魔法命令%%timeit计时

d = {i: i for i in range(10000000)}

转list后用索引取

%%timeit
print(list(d.values())[0])
# 206 ms ± 10.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

转可迭代对象后用next()

%%timeit
print(next(iter(d.values())))
# 112 µs ± 7.3 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

运行效率上第二种高得多。

若数据量不大,第一种更直观。




参考文献

  1. 内置类型 — Python文档
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐