2017-10-18 284 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 –