2

大家好,我有一个问题我正在尝试按字典的值对字典进行排序,但我不断收到

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))

我在 python 方面几乎不是最好的,但我认为一切看起来都不错。

有谁知道为什么会这样?

更新!!!!!!!!!

正如我所建议的那样,我删除了括号,但现在我遇到了错误

 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
4

2 回答 2

3

详细说明 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。

于 2013-03-23T03:58:46.210 回答
1

Python 3.0 不支持 lambda 参数解包。

例如。你需要

lambda x: x[0] 

访问第一个参数

也只是my_dict.items()

于 2013-03-23T03:46:06.997 回答