首页 > 解决方案 > 在python3中迭代有限的dict_values

问题描述

使用 py3,我试图简单地迭代dict_values哪个是 python3 中的视图而不是list,所以我不能再这样做dict_values[:limit]了。


在py3下面不能做,

In [1]: large_dict_values = large_dict.values()

In[2]:type(large_dict_values)
Out[2]: dict_values

In[3]:limit=5

In [4]: [print(item) for item in large_dict_values[:limit]]  
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-eae6bfe09d50> in <module>
----> 1 [print(item) for item in large_dict_values[:limit]]

TypeError: 'dict_values' object is not subscriptable

当然可以将这个view(dict_values)转换list为如下,但考虑如果我有大量的元素在视图中,转换为列表是内存昂贵的操作。这是我能达到的,

In [10]: large_dict_values = large_dict.values()

In[11]:type(large_dict_values)
Out[11]: dict_values

In [13]: dict_values_list = list(large_dict_values)

In [15]: [print(item) for item in dict_values_list]
Out[15]: []

有没有人已经对此感到困惑并有更好的解决方案?

标签: python-3.x

解决方案


也许是这样的:

import string
d = dict([(c, ord(c)) for c in string.ascii_lowercase])
values = d.values()
g = iter(values)
subset = [next(g) for i in range(5)] # take the first five values
print(subset)

推荐阅读