2013-03-23 84 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