如何根据它的值对多级字典进行排序?

时间:2017-02-15 10:57:10

标签: python dictionary ordereddictionary

如何根据它的值对python多级字典进行排序?

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

'age'排序后,应为

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

对此给您带来的不便表示歉意。更正了问题。

2 个答案:

答案 0 :(得分:2)

首先,请注意常规python字典未订购。对于订购词典,您需要使用OrderedDict

要回答您的问题,您可以使用pandas库,它对处理数据非常有用,将项目加载到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 :(得分:2)

您可以使用默认库和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)

输出:

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