0

我尝试像这样切片 OrderedDict:

for key in some_dict[:10]:

但我得到一个 TypeError 说“不可散列的类型:'sl​​ice'”。如何获得这本字典的前 10 个键值对?

4

2 回答 2

2

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使用步长值或非零起始值,但它不能有效地做到这一点 - 它必须获取并丢弃您想要跳过的所有值以获取您感兴趣的值。

于 2020-12-29T16:53:49.577 回答
2

尝试将其OrderedDict转换为可切片的东西:

list_dict = list(some_dict.items())

for i in list_dict[:10]:
  # do something

现在每个键值对都是一个包含两项的元组。(索引 0 是键,索引 1 是值)

于 2020-12-29T16:40:43.867 回答