Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将复杂的嵌套字典排序为嵌套列表_Python - Fatal编程技术网

Python 如何将复杂的嵌套字典排序为嵌套列表

Python 如何将复杂的嵌套字典排序为嵌套列表,python,Python,在Python2.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}}} 所需的解决方案是嵌套

在Python2.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}]]

使用正确的数据结构:

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}]

是否保证第二级dict始终只有一个键值对?是的,第二级dict只有一个on键值对。在这种情况下,似乎更合理的数据结构是
元组
。。。