如何按键排序词典?

时间:2011-08-30 07:22:11

标签: python sorting dictionary key sorted

我有一个dict,看起来像:

channels = {
'24': {'type': 'plain', 'table_name': 'channel.items.AuctionChannel'}, 
'26': {'type': 'plain', 'table_name': 'channel.gm.DeleteAvatarChannel'}, 
'27': {'type': 'plain', 'table_name': 'channel.gm.AvatarMoneyChannel'}, 
'20': {'type': 'plain', 'table_name': 'channel.gm.AvatarMoneyAssertChannel'}, 
'21': {'type': 'plain', 'table_name': 'channel.gm.AvatarKillMobComplexChannel'}, 
'22': {'type': 'plain', 'table_name': 'channel.gm.DistributionMarkChannel'}, 
'23': {'type': 'plain', 'table_name': 'channel.gm.MailChannel'}
}

我想按键('24','26','27'等等)对它进行排序,它应该是这样的:

channels = {
'20': {'type': 'plain', 'table_name': 'channel.gm.AvatarMoneyAssertChannel'}, 
'21': {'type': 'merged', 'table_name': 'channel.gm.AvatarKillMobComplexChannel'}, 
'22': {'type': 'plain', 'table_name': 'channel.gm.DistributionMarkChannel'}, 
'23': {'type': 'plain', 'table_name': 'channel.gm.MailChannel'}
'24': {'type': 'merged', 'table_name': 'channel.items.AuctionChannel'}, 
'26': {'type': 'plain', 'table_name': 'channel.gm.DeleteAvatarChannel'}, 
'27': {'type': 'plain', 'table_name': 'channel.gm.AvatarMoneyChannel'}, 
}

我读过文章,但我不明白如何按主要词典的键排序。

7 个答案:

答案 0 :(得分:6)

不会对Dicts进行排序/排序。如果您使用的是python 2.7,则可以使用OrderedDict。

答案 1 :(得分:5)

标准dict未排序。但是,您可以按排序顺序迭代其键和值:

for channelName, channelValue in sorted(channels.items()):
    ...

答案 2 :(得分:2)

dict是映射,键没有排序。这是由于实现dict()类型的方式:键被散列(使用hash()内置函数)并且您观察到的顺序来自此散列。

你需要一个有序的词典来保存字典,并允许你对键进行排序。 collections.OrderedDict类型是python 3.x的内置有序字典。

这是一个排序数据的示例:

import collections

channels = {
'24': {'type': 'plain', 'table_name': 'channel.items.AuctionChannel'}, 
'26': {'type': 'plain', 'table_name': 'channel.gm.DeleteAvatarChannel'}, 
'27': {'type': 'plain', 'table_name': 'channel.gm.AvatarMoneyChannel'}, 
'20': {'type': 'plain', 'table_name': 'channel.gm.AvatarMoneyAssertChannel'}, 
'21': {'type': 'plain', 'table_name': 'channel.gm.AvatarKillMobComplexChannel'}, 
'22': {'type': 'plain', 'table_name': 'channel.gm.DistributionMarkChannel'}, 
'23': {'type': 'plain', 'table_name': 'channel.gm.MailChannel'}
}

channels = collection.OrderedDict(sorted(channels.items(), key=lambda item: item[0]))
for key,value in channels.items():
    print(key, ':', value)

答案 3 :(得分:1)

dict未分类。但是如果你想以所描述的方式进行迭代,你可以按如下方式进行迭代:

for key in sorted(channels):
    print key

结果:

20
21
22
23
24
26
27

或使用collections.OrderedDict。

答案 4 :(得分:0)

dict没有订单中的密钥,订单无法保证。如果你想创建一个词典列表,你将失去关键信息。

如果您需要排序迭代,可以使用

for key in sorted(dict):
    ....

答案 5 :(得分:0)

result=collections.OrderedDict(sorted(your_dict.items()))

答案 6 :(得分:0)

尝试使用类似的东西:

print [ {i: channels[i] } for  i in sorted(channels)]