2012-06-06 20 views
5

मेरे पास शब्दकोशों की निम्न सूचीdict द्वारा dicts की एक सूची छंटाई महत्व देता

a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}] 

मैं इसे कैसे सॉर्ट प्राप्त करने के लिए कर सकते हैं:

a = [{43:123}, {3:103}, {36:103}, {2:102}, {23:100}] 

मेरा मतलब है, अपने dicts द्वारा सूची को सॉर्ट करने 'मूल्य, अवरोही क्रम में।

+0

उन शब्दकोशों अलग-अलग कुंजी है। क्या इसके लिए कोई बेहतर डेटा प्रकार है? – tlunter

उत्तर

1

आप list.sort() पद्धति के लिए एक key पैरामीटर पारित कर सकते हैं, तो तुलना key के लौटने मूल्य के समारोह में किया जाएगा:

>>> a = [{23:100}, {3:103}, {2:102}, {36:103}, {43:123}] 
>>> a.sort(key=lambda d: d.values()[0], reversed=True) 
>>> a 
[{23: 100}, {2: 102}, {3: 103}, {36: 103}, {43: 123}] 

इस मामले में, कुंजी एक समारोह है जो एक शब्दकोश प्राप्त करता है d और .values() के साथ अपने मूल्य की एक सूची प्राप्त करता है। चूंकि केवल एक मान है, इसलिए हमें लौटाई गई सूची से यह एकमात्र मूल्य मिलता है। फिर, list.sort() विधि क्रमबद्ध होने पर, शब्दकोशों की बजाय, उन लौटाए गए मानों की तुलना करेगा।

sorted(a, key=dict.values, reverse=True) 
सुंदर ज्यादा

एक ही बात है, लेकिन संभवतः अधिक मुहावरेदार:

+0

यह बढ़ते क्रम में एक प्रकार देता है, ओपी घटना चाहता था। – raym0nd

+2

@ raym0nd ठीक है, मरम्मत की गई है, हालांकि मुझे कहना चाहिए कि मैं होडफोड समाधान को वैसे भी पसंद करूंगा :) – brandizzi

3
>>> sorted(a, key=lambda i: i.values()[0], reverse=True) 
[{43: 123}, {3: 103}, {36: 103}, {2: 102}, {23: 100}] 
6

brandizzi के जवाब के अलावा, आप के साथ जा सकते हैं।

+0

+1 मैं सहमत हूं, यह बेहतर जवाब है जब तक कि सवाल निर्दिष्ट न हो कि केवल पहले आइटम को इस प्रकार के लिए उपयोग किया जाए। – jamylak

+0

हे, मैं int को पुनः प्राप्त करने के लिए 'a' dict क्रमबद्ध से मूल्य कैसे निकाल सकता हूं? उदा। 'बी के लिए: एक [i] .keys() i + = 1' प्रिंट करें लेकिन पायथन कहता है कि यह अभी भी एक सूची है, मुझे int को पुनः प्राप्त करने की आवश्यकता है। मैं यह कैसे कर सकता हूं ? – user1403568

+0

@ user1403568 'बी में एक के लिए प्रयास करें: प्रिंट b.keys() [0] '। जो कुंजी को निकालेगा, इसलिए आप प्रिंटिंग समाप्त कर देंगे: 43, 3, 36, 2, 23. यदि आप इसके बजाय मूल्य चाहते हैं (जैसे 123,103,36,102,100), 'b.values ​​() [0] 'का उपयोग करें। – HodofHod

0

मैं नहीं बल्कि प्रयोग करेंगे (या कम से कम यह ध्यान रखें) .itervalues()

In [25]: sorted(a, key=lambda x: x.itervalues().next, reverse=True) 
Out[25]: [{43: 123}, {36: 103}, {2: 102}, {23: 100}, {3: 103}] 
संबंधित मुद्दे