2010-04-13 148 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

您可以使用列表的列表,而不是字典的字典。每个元素都是(键,值)的元组。当然,这意味着你将无法通过键检索元素,但它会保持顺序。我不确定它是否是一个好主意,因为我不知道你在做什么,但它是一种选择。