2010-08-12 74 views
0
r_dict={'answer1': "value1",'answer11': "value11",'answer2': "value2",'answer3': "value3",'answer4': "value4",} 

    for i in r_dict: 
     if("answer" in i.lower()): 
      print i 

    Result is answer11,answer2,snswer4,answer3 

我正在使用Python 2.4.3。我有什麼辦法可以獲得它的填充順序嗎?在Python中排序(2.4)字典

或者有沒有辦法通過正則表達式來做到這一點,因爲我使用的是較老的Python版本?

+0

什麼是「」答案##「'? – katrielalex 2010-08-12 16:06:31

+0

請參閱編輯。 – Hulk 2010-08-12 16:07:04

+0

也許編輯問題的標題,以表明你是在Python 2.4.x或指出collections.OrderedDict不是一個選項。 – whaley 2010-08-12 16:18:13

回答

2

字典是無序的 - 也就是說,他們確實有一些訂單,但它通過插入的順序和按鍵的哈希不明顯的方式影響。但是,還有另一種實現可以記住插入的順序,collections.OrderedDict

編輯:對於Python 2.4,有幾個第三方實現。我沒有使用任何,但因爲the one from voidspace看起來很有前途。

+0

他在python 2.4.3上。 OrderedDict從2.7開始是新的。 – whaley 2010-08-12 16:15:03

+0

是的,已經看到了,並添加了2.4解決方案。 – delnan 2010-08-12 16:19:18

+0

+1空隙的實現。我以前沒有意識到這一點。 – whaley 2010-08-12 16:28:17

1

不只是單獨使用字典。 Python中的字典(以及涉及映射的等效非特定數據結構的很大一部分)未被排序。

您可能潛在子類dict並覆蓋__setitem____delitem__方法來添加/刪除每個鍵到內部列表,您維護自己的排序。您可能必須重寫其他方法,例如__iter__以從您的for循環中獲得想要的排序。

...或者只是使用odict module作爲@delnan suggested

0

簡短的回答:沒有。 Python字典基本上是無序的。

1

字典是由施工無序。如果你想要一個有序的一個,使用一個collections.OrderedDict

import collections 
r_dict = collections.OrderedDict([ ('answer1', "value1"), ('answer11', "value11"), ('answer2', "value2"), ('answer3', "value3"), ('answer4', "value4") ]) 

for i in r_dict: 
    if("answer" in i.lower()): 
     print i 
+0

我正在使用python 2.4.3我認爲這可能不可行 – Hulk 2010-08-12 16:12:49

+0

'集合'是在Python 2.4中引入的,我相信。你試過了嗎? – katrielalex 2010-08-12 16:15:52

+0

啊,道歉。 「集合」確實是在Python 2.4中引入的,但是「OrderedDict」直到2.7才被添加。如果你需要這個功能,可能最容易做一個[(key,value)]元組列表並且自己處理唯一性。 – katrielalex 2010-08-12 16:17:14