2009-02-22 73 views
109

Tôi có một dict trong đó mỗi khóa tham chiếu giá trị int. Cách tốt nhất để sắp xếp các khóa vào danh sách tùy thuộc vào giá trị là gì?Sắp xếp các khóa từ điển trong python

+7

Ngoài ra, đây hỏi về sắp xếp theo chìa khóa, câu trả lời liên quan là về sắp xếp theo giá trị. – ForeverWintr

+0

các câu trả lời dưới đây trả lại danh sách được sắp xếp của các phím chỉ (đó là tầm thường). câu trả lời cho câu hỏi "trùng lặp" về sắp xếp theo giá trị trả lại danh sách được sắp xếp của cặp khóa/giá trị (được sắp xếp theo giá trị). Nếu bạn muốn nó được sắp xếp theo khóa, chỉ cần sử dụng 0 thay vì tham số cho toán tử operator.itemgetter(). – ScienceFriction

Trả lời

91
>>> mydict = {'a':1,'b':3,'c':2} 
>>> sorted(mydict, key=lambda key: mydict[key]) 
['a', 'c', 'b'] 
12
my_list = sorted(dict.items(), key=lambda x: x[1]) 
+1

@ user815423426 bạn chỉnh sửa bài viết của tôi 's/list/my_list /' bởi vì "danh sách là một từ khóa trong python". Chỉnh sửa của bạn là tốt, nhưng danh sách không phải là một từ khóa (c.f. https://docs.python.org/3/reference/lexical_analysis.html#keywords), do đó, đoạn chương trình của tôi sẽ (bytecode-) biên dịch và chạy. Tuy nhiên nó là một tên trong không gian tên '__builtins__', và thực hành không tốt để che giấu tên đó - với một biến miền địa phương có tên là danh sách — và khủng khiếp để ghi đè nó - với một biến toàn cục có tên là danh sách, ví dụ: 'list = tuple'. –

2
[v[0] for v in sorted(foo.items(), key=lambda(k,v): (v,k))] 
346

Tôi thích cái này:

sorted(d, key=d.get) 
+0

Đẹp, nghĩ rằng nó sẽ là tốt đẹp để có một giải pháp thanh lịch cung cấp cho (key, giá trị) cặp được sắp xếp theo khóa. ... và không yêu cầu cung cấp tên biến dict nhiều lần (tôi có xu hướng có tên biến mô tả rất dài). d.iteritems() vẫn có vẻ hữu ích nhất. – travc

+0

Thứ hai, giải pháp k, v được sắp xếp trang nhã – crock1255

Các vấn đề liên quan