2016-01-10 21 views
5

द्वारा एक नेस्टेड सूची मान लीजिए कि मैं नीचे की तरह एक सूची है चलोक्रमबद्ध दो तत्वों

[['Anthony', '10'], ['Ben', '10'], ['Adam', '7'], ['Joe', '6'], ['Harry', '4']] 

तो सबसे पहले प्रकार स्कोर अवरोही क्रम में यह और फिर इसे नाम से आरोही क्रम में क्रमबद्ध करें।


मैं कोशिश की है:

>>> sorted(l, key=lambda x: (int(x[1]), x[0])) 
[['Harry', '4'], ['Joe', '6'], ['Adam', '7'], ['Anthony', '10'], ['Ben', '10']] 

यह काम कर रहा है, इसलिए अब मैं सिर्फ यह रिवर्स की जरूरत है:

>>> sorted(l, key=lambda x: (int(x[1]), x[0]), reverse=True) 
[['Ben', '10'], ['Anthony', '10'], ['Adam', '7'], ['Joe', '6'], ['Harry', '4']] 

आह, reverse=True बस सूची उलट लेकिन हार नहीं मानी उत्पादन की उम्मीद है। तो मैं सिर्फ int(x[1]) के आउटपुट को रिवर्स करना चाहता हूं, लेकिन x[0] नहीं।

मैं यह कैसे कर सकता हूं?

उत्तर

6
>>> sorted(l, key=lambda x: (-int(x[1]), x[0])) 
[['Anthony', '10'], ['Ben', '10'], ['Adam', '7'], ['Joe', '6'], ['Harry', '4']] 

असल में, कुंजी के स्कोर भाग के हस्ताक्षर बदलकर, तरह कुंजी हो जाएगा:

(-10, 'Anthony'), 
(-10, 'Ben'), 
(-7, 'Adam'), 
(-6, 'Joe'), 
(-4, 'Harry') 

और हां, तो (a, b) < (c, d) <=> (a < c) or (a == c and b < d) साथ, आप अपने वांछित छँटाई आदेश के साथ खत्म।

संबंधित मुद्दे