簡體   English   中英

如何按鍵排序詞典?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM