2013-03-29 5 views
10
def sort_dictionary(wordDict): 
    sortedList = [] 
    for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k)): 
     sortedList.append(entry) 

    return sortedList 

समारोह के रूप में एक शब्दकोश जानकारी युक्त प्राप्त होगा: { 'इस': 1, 'है': 1, 'एक': 1, 'बड़े': 2, ' वाक्य ': 1} मैं इसे सूचियों की एक सूची उत्पन्न करना चाहता हूं, तत्वों ने पहले को सबसे बड़े से छोटे से, फिर अक्षरों के अनुसार कुंजी के द्वारा क्रमशः का आदेश दिया है।अजगर 3.2 लैम्ब्डा विन्यास त्रुटि

समारोह ठीक जब अजगर 2.7.2 के साथ चलाने के काम करता है, लेकिन मैं त्रुटि प्राप्त:

File "frequency.py", line 87 
    for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k)): 
                 ^
SyntaxError: invalid syntax 

जब मैं अजगर 3.2.3 के साथ कार्यक्रम चलाते हैं। मैं एक कारण के लिए खोज कर रहा हूं, या 2.7 और 3.2 के बीच मतभेदों को सिंटैक्स क्यों कर रहा हूं, और कुछ भी नहीं आया है। किसी भी मदद या फिक्स की सराहना की जाएगी।

+1

यह ध्यान देने योग्य है कि दोनों के बीच '=' और एक तर्क रिक्त स्थान डाल [पीईपी-8] (के खिलाफ http://www.python.org/dev/ है लायक है पेप्स/पेप-0008/# अन्य-सिफारिशें) की सिफारिशें। –

उत्तर

23

पाम्बोन 3 में लैम्बडा में तर्कों को अनपैक करने के लिए ब्रांड्स का उपयोग करने की अनुमति नहीं है। कारण के लिए PEP 3113 देखें।

lambda (k, v): (-v, k) 

इसके बजाय का उपयोग करें:

lambda kv: (-kv[1], kv[0]) 
+0

यह वाक्यविन्यास क्यों हटाया गया था? – Blender

+0

मुझे इसे मारो, +1। –

+4

@ ब्लेंडर इसे थोड़ा उपयोग किया गया था, और फ़ंक्शन एनोटेशन जैसी चीजें अजीब चीजें बनाई गईं, साथ ही साथ कुछ आत्मनिरीक्षण सामग्री में जटिलता भी शामिल की गई। यह भी बहुत आसानी से बदल दिया गया है। [पीईपी -3113] देखें (http://www.python.org/dev/peps/pep-3113/)। –

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