2011-09-07 45 views
20

thể trùng lặp:
Python: Sort a dictionary by valuegiá trị sắp xếp và danh sách trả lại chìa khóa từ dict python

Tôi có một cuốn từ điển như thế này:

A = {'Name1':34, 'Name2': 12, 'Name6': 46,....} 

Tôi muốn có một danh sách các các khóa được sắp xếp theo các giá trị, tức là [Name2, Name1, Name6....]

Cảm ơn !!!

+0

cảm ơn cho @Felix lời khuyên, nhưng tôi đã tìm kiếm trước khi tôi hỏi và câu trả lời là không phải những gì tôi cần. – Alejandro

+3

Tôi phải không đồng ý, có rất nhiều câu hỏi tương tự với câu trả lời bạn đang tìm kiếm. Ví dụ. câu trả lời bình chọn cao thứ hai trong câu hỏi tôi đã liên kết để cung cấp giải pháp giống như câu trả lời được bỏ phiếu cao nhất tại đây hoặc ví dụ: [những câu trả lời] (http://stackoverflow.com/questions/3417760/how-to-sort-a-python-dict-by-value). Bạn có thể phải thử một số thứ, nhưng câu hỏi chắc chắn đã ở đây rồi. –

+0

"câu trả lời không phải là những gì tôi cần". Một tuyên bố vô dụng. Những gì còn thiếu trong các câu trả lời hiện có? ** Làm cách nào ** chúng không đầy đủ hoặc gây hiểu nhầm? ** Cái gì ** làm cho câu hỏi của bạn bằng cách nào đó độc đáo? Hãy cụ thể**. –

Trả lời

30

Sử dụng sorted với phương pháp get như một chìa khóa (chìa khóa từ điển có thể được truy cập bởi iterating):

sorted(A, key=A.get) 
+4

Điều này không chính xác vì nó sẽ chỉ sắp xếp các khóa, không sắp xếp các khóa theo giá trị của chúng. –

+1

nhưng điều này, trả về một danh sách được sắp xếp theo các phím. Tôi cần danh sách các khóa được sắp xếp theo giá trị. :) – Alejandro

+2

@David Wolever Rất tiếc, bạn hoàn toàn đúng. Đã sửa. – phihag

1

Tôi muốn sử dụng:

items = dict.items() 
items.sort(key=lambda item: (item[1], item[0])) 
sorted_keys = [ item[0] for item in items ] 

Các key lập luận để sắp xếp là một callable trả về phím sắp xếp để sử dụng. Trong trường hợp này, tôi trả lại một bộ gồm (value, key), nhưng bạn chỉ có thể trả lại giá trị (ví dụ: key=lambda item: item[1]) nếu bạn muốn.

+0

Giải pháp khác đơn giản và dễ đọc hơn cho tôi. –

2

sorted(a.keys(), key=a.get)

này sắp xếp các phím, và cho mỗi phím, sử dụng a.get để tìm giá trị sử dụng như là giá trị phân loại của nó.

+0

Lưu ý rằng không cần thiết phải sử dụng 'a.keys', tạo danh sách các phím. 'a' (hoặc' a.iterkeys() ') đã được lặp lại qua các khóa của dict a. –

+1

Vâng, tôi biết nó không cần thiết, nhưng tôi nghĩ nó đọc tốt hơn. Tôi nghĩ những người dicts là những thùng chứa các cặp, không phải là những cái chìa khoá. –

4

Sử dụng sorted 's key luận

sorted(d, key=d.get) 
Các vấn đề liên quan