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が。に対する3番目の非キーワード引数として解釈されるためsorted()です。最初の試みkey=lambda (k,v): (v,k)は良かったのですが、残念ながらPython2のみでした。

于 2013-03-23T03:58:46.210 に答える
1

Python 3.0は、ラムダパラメーターのアンパックをサポートしていません。

例えば。あなたが必要です

lambda x: x[0] 

最初のパラメータにアクセスするには

また、それはただですmy_dict.items()

于 2013-03-23T03:46:06.997 に答える