2012-08-13 62 views
13

thể trùng lặp:
In Python how do I sort a list of dictionaries by values of the dictionary?
Sorting Python dictionary based on nested dictionary valuesLàm thế nào để sắp xếp một từ điển Python theo giá trị?

Tôi có từ điển của các hình thức như đã đề cập dưới đây:

a_dict = { 'e': (1, 100), 'a': (2, 3) } 

tôi không thể sắp xếp nó bằng phần tử thứ hai của tuple. Từ điển kết quả sẽ xuất hiện như sau:

a_dict = { 'a': (2, 3), 'e': (1, 100) } 
+0

@Tichodroma: đó là một danh sách các d ictionaries, đây chỉ là * một * từ điển, không có trong danh sách. –

Trả lời

12

Từ điển không thể được sắp xếp như vậy, nhưng bạn có thể sắp xếp các nội dung của họ:

sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2) 
sorted(a_dict.items(), key=lambda item: item[1][1]) # Python 3 

Bạn có thể đặt kết quả vào một collections.OrderedDict (từ 2.7):

OrderedDict(sorted(a_dict.items(), key=lambda (k, (v1, v2)): v2)) 
OrderedDict(sorted(a_dict.items(), key=lambda item: item[1][1]) # Python 3 
+3

Việc giải quyết đối số được thực hiện trong lambda của bạn sẽ chỉ hoạt động trong Python 2.x. Trong Python 3 bạn sẽ cần phải thực hiện 'key = lambda k, v: v [1]'. – Blckknght

1

Trong ví dụ của bạn, bạn đang sử dụng danh sách các từ điển. Phân loại dict bởi chính:

mydict = {'carl':40, 
      'alan':2, 
      'bob':1, 
      'danny':3} 

for key in sorted(mydict.iterkeys()): 
    print "%s: %s" % (key, mydict[key]) 

alan: 2 
bob: 1 
carl: 40 
danny: 3 

Nếu bạn muốn sắp xếp dict theo giá trị, vui lòng xem Sort a Python dictionary by value

+1

Bạn đang đề cập đến danh sách từ điển nào? Mã trong câu hỏi có từ điển với bộ dữ liệu là giá trị và không có danh sách nào cả. – Blckknght

+0

Tất nhiên bạn đã đúng. Tôi đã mắc sai lầm ngu ngốc. – ymn

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