2013-03-29 8 views
10
def sort_dictionary(wordDict): 
    sortedList = [] 
    for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k)): 
     sortedList.append(entry) 

    return sortedList 

funkcja będzie otrzymywać słownika zawierającego informacje takie jak: { „ta” 1 „jest”: 1, a „a” 1 „duże” 2 " zdanie ": 1} Chciałbym, aby wygenerował listę list, z elementami uporządkowanymi najpierw według wartości słownika od największej do najmniejszej, a następnie alfabetycznie.Pythona 3,2 N Błąd składni

Funkcja działa bez zarzutu, gdy uruchamiane z Pythona 2.7.2, ale otrzymuję błąd:

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

kiedy uruchomić program z python 3.2.3. Szukałem od zawsze z powodu, lub różnice w składni między 2.7 i 3.2, i wymyślić nic. Każda pomoc lub poprawki będą bardzo mile widziane.

+1

Warto zauważyć, że wprowadzenie spacji pomiędzy '=' a argument jest przeciwko [PEP-8] (http://www.python.org/dev/ zalecenia peps/pep-0008/# other-recommendations). –

Odpowiedz

23

Użycie nawiasów do rozpakowania argumentów w lambda jest niedozwolone w Pythonie3. Zobacz PEP 3113 z tego powodu.

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

Zamiast używać:

lambda kv: (-kv[1], kv[0]) 
+0

Dlaczego ta składnia została usunięta? – Blender

+0

Pokonaj mnie, +1. –

+4

@Blender Pokazano, że jest mało używany i sprawiał, że rzeczy takie jak adnotacje funkcji były niezręczne, a także dodawały złożoności do pewnych introspekcji. Jest również bardzo łatwo zastąpiony. Zobacz [PEP-3113] (http://www.python.org/dev/peps/pep-3113/). –