2017-02-15 157 views
1

如何通過它的值對python多級字典進行排序?如何按照它的值對多級字典進行排序?

test_dict = {'Items1':{'name':'Homer', 'age':39},'Items2':{'name':'Bart', 'age':10},'Items3':{'name':'Json','age':20}} 

通過'年齡'排序後,它應該是

test_dict = {'Items2':{'name':'Bart', 'age':10},'Items3':{'name':'Json','age':20},'Items1':{'name':'Homer', 'age':39}} 

我帶來的不便表示歉意。更正了這個問題。

+4

持有? –

+0

字典不是由deffault訂購的,如果您需要訂購,請使用'OrderedDict' – Netwave

+0

如果您正在討論'collections.OrderedDict',請明確鍵入。 – 0Tech

回答

2

首先,請注意常規python字典沒有排序。如需訂購詞典,你需要使用OrderedDict

要回答你的問題,你可以使用pandas庫是用於處理數據,通過加載你的項目大熊貓是非常有用的,他們和出口排序回到一個有序字典

import pandas as pd 
df = pd.DataFrame(test_dict) 
result = df.sort_values(by='age', axis=1, ascending=True).apply(OrderedDict) 

Items2  {u'age': 10, u'name': u'Bart'} 
Items3  {u'age': 20, u'name': u'Json'} 
Items1 {u'age': 39, u'name': u'Homer'} 
+1

這裏不需要熊貓。您可以簡單地使用排序:test_dict ['Items'] = sorted(test_dict ['Items'],key = lambda x:x ['age']) –

+0

@ user2476373:我對此造成的不便深表歉意。更正了這個問題。 – Jackie

+0

@GuillaumeA:我對此造成的不便深表歉意。更正了這個問題。 – Jackie

1

所得您可以使用默認庫這樣做和sorted()方法:

from collections import OrderedDict 

test_dict = { 
    'Items1':{'name':'Homer', 'age':39}, 
    'Items2':{'name':'Bart', 'age':10}, 
    'Items3':{'name':'Json','age':20} 
} 

sorted_dict = OrderedDict() 
sorted_keys = sorted(test_dict, key=lambda x: test_dict[x]["age"])  

for key in sorted_keys: 
    sorted_dict[key] = test_dict[key] 

print(sorted_dict) 

輸出:你的意思是'Items`包含一個列表:上,這不是有效的語法

OrderedDict([('Items2', {'age': 10, 'name': 'Bart'}), ('Items3', {'age': 20, 'name': 'Json'}), ('Items1', {'age': 39, 'name': 'Homer'})]) 
+0

看起來很簡單:),而不使用任何外部庫。使用熊貓!!!一定有一些區別,但不確定。當你打印sorted_dict時,它打印爲OrderedDict !!!爲什麼?我的疑惑聽起來很愚蠢,但我對python很陌生。 – Jackie

+1

正如其他答案和評論所提到的,如果你需要一個字典作爲輸出,那麼你必須使用''OrderedDict''',因爲一個正常的字典不會保留你設置它的順序。一個有序的字典將像正常的字典一樣行事,但它會保持其鍵和值的順序。 – TrakJohnson

相關問題