[英]How to sort dict of dicts by keys?
我有一个字典,看起来像:
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'},
}
我读过文章,但我不明白如何按主要词典的键排序。
Dicts没有排序/订购。 如果您使用的是python 2.7,则可以使用OrderedDict。
标准dict未排序。 但是,您可以按排序顺序迭代其键和值:
for channelName, channelValue in sorted(channels.items()):
...
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)
字典是未分类的。 但是如果你想以所描述的方式进行迭代,你可以按如下方式进行:
for key in sorted(channels):
print key
结果是:
20
21
22
23
24
26
27
或者使用collections.OrderedDict。
dict没有订单中的密钥,订单无法保证。 如果要创建字典列表,您将丢失关键信息。
如果您需要排序的迭代,您可以使用
for key in sorted(dict):
....
result=collections.OrderedDict(sorted(your_dict.items()))
尝试使用类似的东西:
print [ {i: channels[i] } for i in sorted(channels)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.