簡體   English   中英

python 3中的OrderedDict - 如何按順序獲取密鑰?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM