问题描述
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)
运行效率上第二种高得多。
若数据量不大,第一种更直观。