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

    return sortedList 

fonksiyonu gibi bilgileri içeren bir sözlük alıcı olurdu: { 'bu': 1, 'is': 1, 'a': 1, 'büyük': 2 ', cümle ': 1} Listelerin bir listesini oluşturmasını isterim. Öğelerin ilk öğesinin sözlüğünün en büyükten En Küçük'e, sonra da alfabetik olarak tuşlara göre sıralanmasını istiyorum. piton 2.7.2 ile çalıştırdığınızdaPython 3.2 Lambda sözdizimi hatası

fonksiyonu çalışıyor ama hata alırsınız:

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

Python 3.2.3 ile programı çalıştırın. Her yerde, 2.7 ve 3.2 arasındaki nedenlerin veya sözdizimi farklılıklarının bir nedenini araştırdım ve hiçbir şeyle karşılaşmadım. Herhangi bir yardım veya düzeltme çok takdir edilecektir.

+1

Bu '=' ve bir bağımsız değişken arasında boşluk koyarak http://www.python.org/dev/ [PEP-8] (karşı olduğunu belirtmek gerekir peps/pep-0008/# diğer öneriler) önerileri. –

cevap

23

Python3'teki argümanları bir lambda paketinden çıkarmak için parantez kullanılmasına izin verilmez. Nedeni için bkz. PEP 3113.

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

yerine kullanılmaktadır:

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

Bu sözdizimi neden kaldırıldı? – Blender

+0

Beni döv, +1. –

+4

@Blender Çok az kullanılmış, ve bazı ekoptraksiyon malzemelerine karmaşıklık ekleyerek, işlev ek açıklamaları garip bir şey gibi yapılmıştı. Aynı zamanda kolayca değiştirilebilir. Bkz. [PEP-3113] (http://www.python.org/dev/peps/pep-3113/). –