gpt4 book ai didi

python - python 3 中的 OrderedDict - 如何按顺序获取键?

转载 作者:太空狗 更新时间:2023-10-30 00:09:25 27 4
gpt4 key购买 nike

在 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

我当然可以按照建议做 list(rows)[:2] 例如 here -但这能保证让我按顺序拿到 key 吗?这是正确的方法吗?

更新:python 2 代码会更好:

image = [v for v in rows.values()[:2]]

当然在 python 3 上仍然会出现同样的错误

最佳答案

@mglison 是对的。因为 OrderedDict 遵循迭代器协议(protocol),所以可以保证 yield 以正确的顺序将键传递给 list():

但是,就像@mglison 也提到的那样,itertools.islice() 会比简单地使用 list 和下标更好、更高效。在使用 timeit 模块对这两种方法进行多次计时后,itertools 方法大约快了 2 倍。以下是确切的数字:

在获得 list(itertools.islice(rows, 2))list(rows.keys())[:2](请注意,我多次将 islice() 的结果转换为一个列表),看来使用后一种方法实际上稍微快一些:

---------------------------------------------------------------
| list(itertools.islice(rows, 2)) | 1.5023668839901838 |
---------------------------------------------------------------
| list(rows.keys())[:2] | 1.495460570215706 |
---------------------------------------------------------------

然而,这两个数字的差异是如此之小,我真的不会对你使用哪种方法有太大的区别。只需为您的具体情况选择最易读和最容易理解的方法。

关于python - python 3 中的 OrderedDict - 如何按顺序获取键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44147047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com