【发布时间】:2021-04-06 06:47:27
【问题描述】:
我尝试像这样对 OrderedDict 进行切片:
for key in some_dict[:10]:
但我收到一个 TypeError 说“不可散列的类型:'slice'”。如何获取这本字典的前 10 个键值对?
【问题讨论】:
-
dict对象不可切片
标签: python python-3.x slice ordereddict
我尝试像这样对 OrderedDict 进行切片:
for key in some_dict[:10]:
但我收到一个 TypeError 说“不可散列的类型:'slice'”。如何获取这本字典的前 10 个键值对?
【问题讨论】:
dict 对象不可切片
标签: python python-3.x slice ordereddict
尝试将OrderedDict 转换为可切片的内容:
list_dict = list(some_dict.items())
for i in list_dict[:10]:
# do something
现在每个键值对都是一个包含两项的元组。 (索引 0 是键,索引 1 是值)
【讨论】:
OrderedDict 仅用于维护顺序,而不是按该顺序的位置提供有效查找。 (在内部,它们使用双向链表维护顺序。)OrderedDicts 无法提供有效的一般情况切片,因此它们不实现切片。
对于您的用例,您可以改用 itertools 在 10 个元素后停止循环:
import itertools
for key in itertools.islice(your_odict, 0, 10):
...
或
for key, value in itertools.islice(your_odict.items(), 0, 10):
...
在内部,islice 将在到达第 10 个项目时停止从底层 OrderedDict 迭代器获取项目。请注意,虽然您可以告诉 islice 使用步长值或非零起始值,但它不能有效地执行此操作 - 它必须获取并丢弃您想要跳过的所有值以获取您感兴趣的值在。
【讨论】:
itertools.islice(your_odict.items(), 0, 10)吗?
for key in some_dict[:10]:,所以我坚持使用最接近答案的内容。