2012-10-18 88 views
3

根据值在Python 2.6中排序嵌套字典的最佳方法是什么?我想按照内部字典的长度和最大值的内部字典进行排序。例如:如何将复杂的嵌套字典排序为嵌套列表

d = {1: {'AA': {'a': 100, 'b': 1, 'c': 45}}, 
    2: {'AA': {'c': 2}}, 
    3: {'BB': {'d': 122, 'a': 4, 't': 22, 'r': 23, 'w': 12}}, 
    4: {'CC': {'y': 12, 'g': 15, 'b': 500}}} 

所需的解决方案是一个嵌套列表:

lst = [[3, 'BB', {'d': 122, 'a': 4, 't': 22, 'r': 23, 'w': 12}], 
     [4, 'CC', {'y': 12, 'g': 15, 'b': 500}], 
     [1, 'AA', {'a': 100, 'b': 1, 'c': 45}], 
     [2, 'AA', {'c': 2}]] 
+0

我已经现在修复它。 – user1728853

+2

保证二级字典总是只有一个键值对吗? – mgilson

+0

是的,secound级别只有键值对。 – user1728853

回答

5

有了您的修正后的数据结构:

d = {1: {'AA': {'a': 100, 'b': 1, 'c': 45}}, 
    2: {'AA': {'c': 2}}, 
    3: {'BB': {'d': 122, 'a': 4, 't': 22, 'r': 23, 'w': 12}}, 
    4: {'CC': {'y': 12, 'g': 15, 'b': 500}}} 

def sortkey(x): 
    num,d1 = x 
    key,d2 = d1.items()[0] #Some may prefer `next(d.iteritems())` 
    return len(d2),max(d2.values()) 

exactly_how_you_want_it = [([k] + v.keys() + v.values()) for k,v in 
          sorted(d.items(),reverse=True,key=sortkey)] 

for item in exactly_how_you_want_it: 
    print item 

结果:

[3, 'BB', {'a': 4, 'r': 23, 'd': 122, 'w': 12, 't': 22}] 
[4, 'CC', {'y': 12, 'b': 500, 'g': 15}] 
[1, 'AA', {'a': 100, 'c': 45, 'b': 1}] 
[2, 'AA', {'c': 2}]