2013-03-23 61 views
1

大家好我有一個問題,我想通過它的價值排序的字典,但我不斷收到排序字典值:錯誤拉姆達

Invalid Syntax Error 

出現錯誤周圍lambda(k

繼承人什麼我有:

import string 

my_dict = {'a' : 15, 'c' : 35, 'b' : 20} 

for key, value in sorted(my_dict.iteritems(), key=lambda (k,v): (v,k)): 

    print("%s: %s" % (key, value)) 

我不是最好的蟒蛇,但我認爲一切都看起來不錯。

有沒有人有任何想法,爲什麼發生這種情況?

UPDATE !!!!!!!!!

由於sugested我刪除了括號,但現在我得到錯誤

for key, value in sorted(my_dict.iteritems(), key=lambda k,v: v,k): 
     print("%s: %s" % (key, value)) 

我不知道這意味着什麼:

SyntaxError: non-keyword arg after arg 
+3

你運行的是哪個版本的python?上面的代碼在Python 2.7中爲我運行Python 012.0 – Genzume 2013-03-23 03:43:46

+0

Python 3.3.0,在這個版本中有更有效的方法嗎? – 2013-03-23 03:45:15

回答

2

在闡述jamylak的答案,因爲Python 3沒有參數拆包,你需要使用:

key=lambda item: (item[1], item[0]) 

至於爲什麼

for key, value in sorted(my_dict.iteritems(), key=lambda k,v: v,k): 

失敗

SyntaxError: non-keyword arg after arg 

這是因爲在過去k被解釋爲第三,非關鍵字參數sorted()。你的第一次嘗試key=lambda (k,v): (v,k)是好的,但不幸的是,僅用於Python 2。

+0

我的理解不斷得到啓發。謝謝。 – 2013-03-23 04:02:57

1

的Python 3.0不支持拉姆達參數拆包。

例如,您需要

lambda x: x[0] 

要訪問的第一個參數

而且它只是my_dict.items()

+0

恩,這是有道理的感謝分手給我。我想解決方案的方式從python版本到python版本。 – 2013-03-23 03:55:46