2010-04-13 144 views
2

喜即時通訊做一個循環,使我能得到的數據字典,但由於它的字典是 按字母排序,而不是因爲我推trought循環...蟒蛇:排序

是否有可能以某種方式轉關閉字母排序?

這裏是如何做呢

data = {} 
for item in container: 
    data[item] = {} 
    ... 
    for key, val in item_container.iteritems(): 
    ... 
    data[item][key] = val 

whitch給我這樣的事情

data = { 
    A : { K1 : V1, K2 : V2, K3 : V3 }, 
    B : { K1 : V1, K2 : V2, K3 : V3 }, 
    C : { K1 : V1, K2 : V2, K3 : V3 } 
} 

,我想這是因爲我要去throught循環,例如

data = { 
    B : {K2 : V2, K3 : V3, K1 : V1}, 
    A : {K1 : V1, K2 : V2, K3 : V3}, 
    C : {K3 : V3, K1 : V1, K2 : V2} 
} 
+7

它似乎只是按字母順序。如果您爲其添加更多字符串或其他項目,則會看到它不是按字母順序排列的。字典沒有可靠的順序。 – 2010-04-13 14:24:35

回答

5

如果您確實需要使用字典而不是列表,請查看新的OrderedDict(Python 3.1,即將在Python 2.7中提供)。這將保持其項目的添加順序。

from collections import OrderedDict 
data = OrderedDict() 
for item in container: 
    data[item] = OrderedDict() 
    ... 
    for key, val in item_container.iteritems(): 
    ... 
    data[item][key] = val 
+1

我建議你添加一個鏈接到提供OrderedDict for Python 2.4到2.6的包:http ://pypi.python.org/pypi/ordereddict – 2010-04-13 18:06:45

+0

哦,太好了 - 我不知道那件事。那麼,你已經添加了這個鏈接,沒有太多的留給我做:) – 2010-04-13 19:23:17

3

你不應該依賴字典中數據的排序順序;因爲它只是一個鍵/值對的集合,所以排序不受底層實現的保證,可能會在未來版本中更改。

+1

欲瞭解更多信息,請參閱:http://stackoverflow.com/questions/613183/python-sort-a-dictionary-by-value – 2010-04-13 14:23:25

0

您可以使用列表的列表,而不是字典的字典。每個元素都是(鍵,值)的元組。當然,這意味着你將無法通過鍵檢索元素,但它會保持順序。我不確定它是否是一個好主意,因爲我不知道你在做什麼,但它是一種選擇。