2013-08-09 54 views
12

Tôi có một danh sách liệt kê có chứa người dùng và điểm số như sau:python: sắp xếp một danh sách liệt kê bởi một mục trong danh sách phụ chứa

[["user1", 100], ["user2", 234], ["user3", 131]...] 

Tôi muốn tạo ra một danh sách sắp xếp các người dùng bằng số điểm trong thứ tự từ chối:

[["user2", 234], ["user3", 131], ["user1", 100]...] 

Làm cách nào để tôi thực hiện loại sắp xếp này?

Trả lời

15
>>> li = [["user1", 100], ["user2", 234], ["user3", 131]] 
>>> 
>>> import operator 
>>> 
>>> sorted(li, key=operator.itemgetter(1)) # Ascending order 
[['user1', 100], ['user3', 131], ['user2', 234]] 

>>> sorted(li, key=operator.itemgetter(1), reverse=True) # Reverse Sort 
[['user2', 234], ['user3', 131], ['user1', 100]] 
6

sorted chấp nhận tùy chọn key chức năng và thông số đảo ngược.

>>> sorted([["user1", 100], ["user2", 234], ["user3", 131]], key=lambda x: x[1], reverse=True) 
[['user2', 234], ['user3', 131], ['user1', 100]] 
5
l = [["user1", 100], ["user2", 234], ["user3", 131]] 
l.sort(lambda x, y: x[1]) 
8

Bạn có thể tùy chỉnh các hành vi sắp xếp theo vượt qua một chìa khóa và ngược lại. sorted sẽ trả về một danh sách mới. Nếu sắp xếp tại chỗ, hãy sử dụng list.sort.

>>> a = [["user1", 100], ["user2", 234], ["user3", 131]] 
>>> sorted(a, key=lambda x: x[1], reverse=True) 
[['user2', 234], ['user3', 131], ['user1', 100]] 
Các vấn đề liên quan