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

    return sortedList 

Chức năng sẽ nhận từ điển chứa thông tin như: {'this': 1, 'is': 1, 'a': 1, 'large': 2, ' câu ': 1} Tôi muốn tạo danh sách các danh sách, với các yếu tố được đặt hàng trước tiên bằng các giá trị của từ điển từ Lớn nhất đến Nhỏ nhất, sau đó theo các phím theo thứ tự abc.Python 3.2 Lỗi cú pháp Lambda

Chức năng hoạt động tốt khi chạy với python 2.7.2, nhưng tôi nhận được lỗi:

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

khi tôi chạy chương trình với python 3.2.3. Tôi đã tìm kiếm tất cả vì một lý do tại sao, hoặc sự khác biệt cú pháp giữa 2,7 và 3,2, và đã đưa ra không có gì. Bất kỳ trợ giúp hoặc bản sửa lỗi nào sẽ được đánh giá cao.

+1

Nó đáng chú ý rằng việc đưa khoảng trống giữa các '=' và một cuộc tranh cãi là chống lại [PEP-8] (http://www.python.org/dev/ peps/pep-0008/# khác-khuyến nghị) 's khuyến nghị. –

Trả lời

23

Sử dụng dấu ngoặc đơn để giải nén các đối số trong một lambda không được phép trong Python3. Xem PEP 3113 vì lý do tại sao.

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

Thay vì sử dụng:

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

Tại sao cú pháp này bị xóa? – Blender

+0

Đánh tôi với nó, +1. –

+4

@Blender Nó đã được chứng minh là ít được sử dụng, và làm những thứ như chú thích chức năng vụng về, cũng như thêm sự phức tạp cho một số nội dung nội tâm. Nó cũng rất dễ dàng thay thế. Xem [PEP-3113] (http://www.python.org/dev/peps/pep-3113/). –