27
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 の間の構文の違いをずっと探していましたが、何も思いつきませんでした。ヘルプや修正をいただければ幸いです。

4

1 に答える 1

61

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

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

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

lambda kv: (-kv[1], kv[0])
于 2013-03-29T22:13:56.697 に答える