web-dev-qa-db-ja.com

Python 3.2 Lambda構文エラー

def sort_dictionary( wordDict ):
    sortedList = []
    for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k) ):
        sortedList.append( entry )

    return sortedList

関数は次のような情報を含む辞書を受け取ります:{'this':1、 'is':1、 'a':1、 'large':2、 'sentence':1}生成させたいリストのリスト。最初に辞書の値が最大から最小の順に要素が並べられ、次にキーがアルファベット順に並べられます。

python 2.7.2で実行すると関数は正常に動作しますが、次のエラーが表示されます:

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

python 3.2.3でプログラムを実行すると、なぜか、または2.7と3.2の構文の違いのために何もかも検索していましたが、何も見つかりませんでした。いただければ幸いです。

23
Zack

括弧を使用してラムダで引数をアンパックすることは、Python3では許可されていません。理由は PEP 311 を参照してください。

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

代わりに次を使用します:

lambda kv: (-kv[1], kv[0])
52
unutbu