【发布时间】:2017-05-24 00:25:16
【问题描述】:
在 python 2 中,当使用 OrderedDict 时,我可以通过简单地使用返回列表的 keys 方法按插入顺序获取键。然而在 python 3 中:
rows = OrderedDict()
rows[0]=[1,2,3]
rows[1]=[1,2,3]
image = [rows[k] for k in rows.keys()[:2]]
我明白了:
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'odict_keys' object is not subscriptable
我当然可以按照here 的建议做list(rows)[:2] - 但这能保证我按顺序拿到钥匙吗?这是正确的方法吗?
更新:python 2代码会更好:
image = [v for v in rows.values()[:2]]
当然在 python 3 上仍然会出现同样的错误
【问题讨论】:
-
是的,使用
list(rows)是按顺序获取密钥的正确方法,因为它使用保证有序的__iter__和__next__。如果您只需要前 2 个键,您可能需要考虑类似itertools.islice(rows, 2)而不是list(rows)[:2]... -
谢谢@mgilson - 不知道什么会更快 - 复制一个小列表或使用 itertools 模块 - 也许尝试一个答案? :)
标签: python python-3.x ordereddictionary