2012-03-29 23 views
19

मैं कुंजी या मान से सॉर्ट कर सकता हूं, लेकिन मुझे इसे एक पंक्ति में मूल्य, फिर कुंजी द्वारा क्रमबद्ध करने की आवश्यकता है। इस बेहतर व्याख्या करने के लिए मैं तुम्हें मेरी समस्या दिखा सकते हैं:मूल्य से एक शब्दकोश को क्रमबद्ध करना कुंजी

dict = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4} 

मैं अपने उत्पादन उनके मूल्य द्वारा उतरते क्रमबद्ध करना और उसके बाद आरोही उनके कुंजी (वर्णानुक्रम) द्वारा (A-Z) चाहते हैं। इस तरह के एक सूची है, जिसके परिणामस्वरूप:

के उत्पादन के साथ: ['peach', 'banana', 'beetroot', 'almond', 'apple']

एक ही रास्ता मैं इसे अब तक कैसे करना है पता है: ['almond', 'apple', 'banana', 'beetroot', 'peach']

:

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k))] 
के उत्पादन के साथ

इसलिए इसने मूल्यों को आरोही क्रम में क्रमबद्ध किया है और कुंजी क्रमशः आरोही क्रम (एजेड) में क्रमबद्ध किया है। के उत्पादन के साथ

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (v,k), reverse=True)] 

:: तो अगर मैं इस रिवर्स ['peach', 'beetroot', 'banana', 'apple', 'almond']

यह वर्णानुक्रम आदेश (Z- ए) अवरोही क्रम में अवरोही क्रम में मूल्यों और चाबी हल कर दी है।

क्या कोई तरीका है कि मैं मूल्यों को अवरोही क्रम में क्रमबद्ध कर सकता हूं और आरोही क्रम में कुंजी (यानी ए-जेड) और ऊपर दिखाए गए आउटपुट को प्राप्त कर सकता हूं?

उत्तर

34

आपको इस तथ्य का लाभ उठाने की आवश्यकता है कि मान संख्याएं हैं।

>>> [v[0] for v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))] 
['peach', 'banana', 'beetroot', 'almond', 'apple'] 
+6

बस एक चेतावनी है कि अजगर 3 हटाया टपल पैरामीटर खोल, तो रेखा से ऊपर अब '[v [0] क्रमबद्ध (d.items() में वी के लिए, कुंजी = लैम्ब्डा केवी के रूप में लिखा जाना चाहिए : (-केवी [1], केवी [0]))] '। पीईपी 3113 देखें https://www.python.org/dev/peps/pep-3113/ –

+0

कुंजी फ़ंक्शन को 'operator.itemgetter (1, 0) '* के रूप में भी लिखा जा सकता है यदि * आपको * रिवर्स नहीं करना है कुंजी/मूल्य में से एक का आदेश। – Moberg

5

क्रमबद्ध करने के लिए उतरते मूल्य है द्वारा, negatable मात्रा के लिए, नकारात्मक के- मूल्य आरोही द्वारा सॉर्ट करने के लिए।

[v[0] for v in sorted(dict.items(), key=lambda(k,v): (-v,k))] 
1
>>> d = {'apple':2, 'banana':3, 'almond':2, 'beetroot':3, 'peach':4} 
>>> [k for k, v in sorted(d.iteritems(), key=lambda(k, v): (-v, k))] 
['peach', 'banana', 'beetroot', 'almond', 'apple'] 
संबंधित मुद्दे