2012-11-05 65 views
7

的嵌套字典的名單上有類似排序在python

[ 
    { 
     "key": { "subkey1":1, "subkey2":"a" } 
    }, 
    { 
     "key": { "subkey1":10, "subkey2":"b" } 
    }, 
    { 
     "key": { "subkey1":5, "subkey2":"c" } 
    } 
] 

而且需要有:

[ 
    { 
     "key": { "subkey1":10, "subkey2":"b" } 
    }, 
    { 
     "key": { "subkey1":5, "subkey2":"c" } 
    }, 
    { 
     "key": { "subkey1":1, "subkey2":"a" } 
    } 
] 

非常感謝!

編輯:我想按subkey1排序,這是不明確的。

回答

12

使用key關鍵字的sorted() functionsort() method

yourdata.sort(key=lambda e: e['key']['subkey'], reverse=True) 

演示:

>>> yourdata = [{'key': {'subkey': 1}}, {'key': {'subkey': 10}}, {'key': {'subkey': 5}}] 
>>> yourdata.sort(key=lambda e: e['key']['subkey'], reverse=True) 
>>> yourdata 
[{'key': {'subkey': 10}}, {'key': {'subkey': 5}}, {'key': {'subkey': 1}}] 

這假定所有頂級字典有key關鍵,這是假定是帶有subkey鍵的字典。

查看Python Sorting HOWTO瞭解更多詳情和技巧。

0
sorted(yourdata, reverse=True) 
+0

我沒有downvote,但你會意識到,一個'dict'作爲迭代返回鍵,所以你不會最終得到一個有用的列表 –

+0

不明白。輸出就像問。 – alexvassel

+1

@alexvassel:* simple *例子中的輸出恰好相同,但是如果任何字典中有一個額外的鍵,結果將會非常不同。我沒有downvote你的答案,但它*是*在該帳戶不正確。 –

0

假設您想要的d['key']['subkey']在列表中的每個詞典d值進行排序,使用此:

sorted(yourdata, key=lambda d: d.get('key', {}).get('subkey'), reverse=True)