2012-02-11 142 views
4

我有以下結構:的Python:獲取字典的鍵由子字典值排序列表

structure = { 
    'pizza': { 
     # other fields 
     'sorting': 2, 
    }, 
    'burger': { 
     # other fields 
     'sorting': 3, 
    }, 
    'baguette': { 
     # other fields 
     'sorting': 1, 
    } 
} 

從這個結構,我需要通過內部字典的sorting字段排序外詞典的按鍵,因此輸出是['baguette', 'pizza', 'burger']

有沒有足夠簡單的方法來做到這一點?

回答

9

list.sort()方法和sorted()內置函數採取key參數,它是一個這就是所謂的每個項目進行排序的功能,並且該項目是基於keyfunction的返回值來分類的。因此,寫一個函數,它的關鍵在structure並返回要排序的事情:

>>> def keyfunc(k): 
...  return structure[k]['sorting'] 
... 
>>> sorted(structure, key=keyfunc) 
['baguettes', 'pizza', 'burger'] 
+0

你忘了'.keys()',但除此之外這是有效的! – Martin 2012-02-11 21:53:06

+4

我沒有忘記'.keys()',這是沒有必要的。當你迭代它們時,字典會產生密鑰。 – 2012-02-11 21:59:43

7

可以使用sorted內置函數。

sorted(structure.keys(), key = lambda x: structure[x]['sorting'])