2012-03-30 34 views
3

在Python中,有沒有辦法檢索按順序添加項目的鍵列表?Python:按添加的順序檢索字典鍵?

String.compareMethods = {'equals': String.equals, 
         'contains': String.contains, 
         'startswith': String.startswith, 
         'endswith': String.endswith} 

您在這裏看到的鍵是用於選擇(下拉)框,因此順序很重要。

有沒有一種方法沒有保留一個單獨的列表(並沒有過分複雜的事情,我想要做的)?對於我所看到的由於涉及哈希而不可能的...

我正在使用Python 2.6.x.

回答

9

對Python 2.7+使用collections.OrderedDict,對於舊版本的Python使用OrderedDict from PyPI。您應該可以使用pip install ordereddicteasy_install ordereddict安裝Python 2.4-2.6。

它是dict的一個子類,因此採用dict的任何方法也將接受OrderedDict

+1

所以,只有添加自定義字典的方式。我不像大多數人那樣處於通常的Python環境中,所以我必須檢查這是否符合我的「過於複雜的事情」。 – Kawu 2012-03-30 03:02:04

+0

@Kawu這是一門課。請參閱http://code.activestate.com/recipes/576693/,該軟件包基於的配方。如果你願意,你可以簡單地將它複製粘貼到你現有的模塊中 - 沒有什麼複雜的。 – agf 2012-03-30 03:31:25

+0

當然可以,但這很粗糙。我可能必須這樣做,因爲我無法預見此腳本運行的版本。否則,我必須檢查版本,然後使用一些條件邏輯來使用Python提供的OrderedDict,如果在2.7 + env或回退到我提供的實現中。不知道這是否可能,也不知道這是否可取。 – Kawu 2012-03-30 03:47:09

2

你需要什麼叫做OrderedDict

from collections import OrderedDict 

d = OrderedDict(); 
d['equals'] = String.equals 
d['contains'] = String.contains 
# ... 
+0

是的,但他在Python 2.6,所以沒有'collections.OrderedDict'。 – agf 2012-03-30 02:59:07

+0

的確,這就是我添加額外信息的原因。 – Kawu 2012-03-30 03:00:09