2012-10-20 12 views
8

कहें कि मेरे पास एक शब्दकोश है और फिर मेरे पास एक सूची है जिसमें शब्दकोश की कुंजी शामिल है। क्या शब्दकोश मूल्यों के आधार पर सूची को सॉर्ट करने का कोई तरीका है?पायथन में शब्दकोश मानों के आधार पर एक सूची क्रमबद्ध करें?

मैं इस कोशिश कर रहे हैं:

trial_dict = {'*':4, '-':2, '+':3, '/':5} 
trial_list = ['-','-','+','/','+','-','*'] 

मैं उपयोग करने के लिए चला गया:

sorted(trial_list, key=trial_dict.values()) 

और मिल गया:

TypeError: 'list' object is not callable 

तो मैं एक समारोह है कि हो सकता है बनाने के जाने के लिए चला गया trial_dict.get() के साथ बुलाया गया:

def sort_help(x): 
    if isinstance(x, dict): 
     for i in x: 
      return x[i] 

sorted(trial_list, key=trial_dict.get(sort_help(trial_dict))) 

मुझे नहीं लगता कि sort_help फ़ंक्शन इस तरह के किसी भी प्रभाव पर पड़ रहा है। मुझे यकीन नहीं है कि trial_dict.get() का उपयोग करना या तो इसके बारे में जाने का सही तरीका है।

उत्तर

8

हाँ dict.get सही (कम से कम या सरल) तरीका है:

sorted(trial_list, key=trial_dict.get) 

के रूप में मार्क Amery टिप्पणी की, बराबर स्पष्ट लैम्ब्डा:

sorted(trial_list, key=lambda x: trial_dict[x]) 

कम से कम दो कारणों से बेहतर हो सकता है:

  1. सॉर्ट अभिव्यक्ति दिखाई दे रही है और तुरंत संपादन योग्य
  2. यह त्रुटियों को दबा नहीं देता है (जब सूची में कुछ ऐसा होता है जो निर्देश में नहीं है)।
+0

ओई, जिन प्रश्नों का मैं जवाब दे रहा हूं उन पर कूदना बंद कर दूंगा और स्पष्ट जवाब दे! :) अधिक गंभीरता से: thg के उत्तर और मेरा व्यवहार के बीच व्यवहार में एक अंतर है। मेरा परीक्षण अपवाद उठाएगा यदि परीक्षण_वृत्त में एक मान होता है जो trial_dict की कुंजी नहीं है, जबकि thg चुपचाप उस मान को सामने की ओर क्रमबद्ध करेगा। या तो संदर्भ के आधार पर उपयुक्त हो सकता है। –

+0

@ thg435 मुझे दस्तावेज़ों की दोबारा जांच करनी चाहिए, मैं स्पष्ट रूप से'get 'को गलत समझ रहा था। – tijko

+0

@ मार्क आर्मरी: [आप अच्छे थे, बच्चे, असली अच्छा। लेकिन जब तक मैं चारों ओर हूं, आप हमेशा दूसरा सर्वश्रेष्ठ देखेंगे, देखें?] (Http://www.imdb.com/title/tt0110475/quotes)) – georg

5

sorted बिल्टिन फ़ंक्शन (या sort सूचियों की विधि) में मुख्य तर्क एक ऐसा कार्य होना चाहिए जो उस सूची के सदस्यों को मानचित्रित करता है जिन्हें आप क्रमबद्ध करना चाहते हैं। तो आप इस हैं:

sorted(trial_list, key=lambda x: trial_dict[x]) 
+0

मुझे इस तरह के छोटे कार्य के लिए लैम्ब्डा को ध्यान में रखना चाहिए। मैं thg435 को उत्तर के रूप में चिह्नित कर रहा हूं लेकिन, यह वास्तव में उपयोगी था, मुझे भविष्य के उपयोग के लिए लैम्ब्डा का उपयोग करने के बारे में सोचना होगा, धन्यवाद! :) – tijko

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