2017-10-18 194 views
-1

我想解决这个问题,排序一个特定的嵌套字典。排序嵌套字典python

结构如下:

dct = { 
    "test": { 
     0: [1, 3], 
     1: [5, 6], 
    }, 
    "test2": { 
     7: [9], 
     3: [4, 6], 
    } 
} 

我希望能够通过“测试”一词,并在关键排序,以便在“TEST2”我会先3,然后7

我已经试过这

arr = OrderedDict(sorted(dct.items(), key=lambda x: (x[0], x[1]))) 

但是,这似乎并没有工作。有什么办法可以进行这种排序吗?

+0

等等,'test2'与'test'在这里有什么关系? –

+0

@ KaushikNP基本上有一个字典,其中有“test”和“test2”键。这些键中的每一个都作为内部字典的值保存。因此,例如dict [“test”] = {0:[1,3],1:[5,6]} –

+0

基本上,按字典中的键进行排序吧? –

回答

1

如果你想外字典和排序的所有内部类型的字典,那么你需要OrderedDict S的OrderedDict。你可以用类似的方式创建它

OrderedDict(sorted((k, OrderedDict(sorted(v.items()))) for k,v in dct.items())) 
2

因此,基本上keys需要sortednested dict,通过字典并将数据传输到一个新的字典。

​​

#driver值

IN : d 
{ 
    'test' :{ 0:[1,3] , 
       1:[5,6] 
      }, 
    'test2':{ 7:[9], 
      3:[4,6] 
      } 
} 

OUT : new_d 
OrderedDict([('test', {0: [1, 3], 1: [5, 6]}), ('test2', {3: [4, 6], 7: [9]})]) 

编辑:由于OP想要字典的初始密钥(EX:test3:{ ... } , test2:{ ... })进行过整理,需要下面的变化来完成:

>>> initial_sort = OrderedDict(sorted(d.items())) 
>>> inital_sort 
OrderedDict([('test2', {7: [9], 3: [4, 6]}), ('test3', {0: [1, 3], 1: [5, 6]})]) 

>>> new_d = OrderedDict() 

>>> for key,val in initial_sort.items():      #go through the first key sorted dictionary 
     new_d[key] = OrderedDict(sorted(val.items())) 

#驱动值

IN : d = {'test3': {0: [1, 3], 1: [5, 6]}, 'test2': {7: [9], 3: [4, 6]}} 
OUT : new_d = OrderedDict([('test2', OrderedDict([(3, [4, 6]), (7, [9])])), ('test3', OrderedDict([(0, [1, 3]), (1, [5, 6])]))]) 
+0

是的,我使用Python 2.7 –

+0

@JohhnyBravo,这也适用于Python 2.7 –