2012-11-05 32 views
7

में मैंनेस्टेड शब्दकोशों की सूची छँटाई अजगर

[ 
    { 
     "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

sorted() function और sort() method को key कीवर्ड का प्रयोग करें:

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: * सरल * उदाहरण मामले में आउटपुट समान होता है, लेकिन यदि किसी भी शब्दकोश में इसमें कोई अतिरिक्त कुंजी है, तो परिणाम वास्तव में * बहुत अलग होंगे। मैंने आपके उत्तर को कम नहीं किया है, लेकिन यह उस खाते पर * गलत है। –

0

मान लिया जाये कि आप सूची में हर शब्दकोश d के लिए d['key']['subkey'] का मूल्य द्वारा क्रमबद्ध करना चाहते हैं, इस का उपयोग करें:

sorted(yourdata, key=lambda d: d.get('key', {}).get('subkey'), reverse=True) 
संबंधित मुद्दे