2011-09-02 57 views
0

可能重复列表的词典:
Sorting a dictionary having keys as string of numbers in python排序依据键值

我想对列表进行排序的基础上的按键值的字典。这是现在的样子

{'217': ['109'], 
'214': ['111', '156', '159'], 
'215': ['111'], 
'219': ['111', '114', '212', '214’]} 

但我想是这样

{'214': ['111', '156', '159'], 
'215': ['111'], 
'217': ['109'], 
'219': ['111', '114', '212', '214’]} 

有什么建议?谢谢

回答

3

字典没有自己的钥匙在任何特定的顺序,因为它们是作为哈希实现排序表。你可以在有序的键和值,而不是作为一个字典,使用类似:

>>> mydict = {'217': ['109'], '214': ['111', '156', '159'], '215': ['111'], '219': ['111', '114', '212', '214']} 
>>> [(k, mydict[k]) for k in sorted(mydict)] 
[('214', ['111', '156', '159']), ('215', ['111']), ('217', ['109']), ('219', ['111', '114', '212', '214'])] 
1

您可以使用collections.OrderedDict(可在Python2.7或3.1+)

使用TokenMacGuy的理解:

collections.OrderedDict((k, mydict[k]) for k in sorted(mydict)) 
+2

请注意'OrderedDict'不保留键排序,而是按照它们插入的顺序返回它们。由于JBernardo按排序顺序插入它们,它们将被返回,但如果稍后添加更多的键,则必须使用OrderedDict。 – SingleNegationElimination

+0

这就是为什么你需要排序之前... – JBernardo

+0

我注意到了,但也许并不是每个人都在看你的答案,发现这很明显;我想我会提请注意那个细节。 – SingleNegationElimination