[英]OrderedDict in python 3 - how to get the keys in order?
在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]
- 但這是否保證按順序獲取密鑰? 這是正確的方法嗎?
更新 :python 2代碼會更好:
image = [v for v in rows.values()[:2]]
當然在python 3上仍然會出現同樣的錯誤
@mglison是對的。 因為OrderedDict
如下迭代器協議,它是保證yield
正確的順序將密鑰list()
但是,就像@mglison也提到的那樣, itertools.islice()
比使用list
和subscripting更好,更有效。在使用 timeit
模塊對這兩種方法進行多次計時之后, itertools
方法的速度大約快了2倍。以下是確切的數字:
獲得運行兩個list(itertools.islice(rows, 2))
的平均時間list(itertools.islice(rows, 2))
和list(rows.keys())[:2]
(注意我將islice()
的結果轉換為列表)多次,似乎使用后一種方法實際上稍快一點:
---------------------------------------------------------------
| list(itertools.islice(rows, 2)) | 1.5023668839901838 |
---------------------------------------------------------------
| list(rows.keys())[:2] | 1.495460570215706 |
---------------------------------------------------------------
但是,這兩個數字的差異是如此之小,我真的不會對你使用哪種方法產生太大影響。 只需選擇對您的具體情況最具可讀性和可理解性的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.