2012-02-21 42 views
19

thể trùng lặp:
python: how to sort a complex list on two different keysSắp xếp một danh sách các hàng phụ thuộc vào hai yếu tố

Tôi đã có một danh sách các hàng. Tôi muốn sắp xếp chúng tùy thuộc vào hai yếu tố. Dưới đây là ví dụ sau

unsorted = [('a', 4, 2), ('a', 4, 3), ('a', 7, 2), ('a', 7, 3), ('b', 4, 2), ('b', 4, 3), ('b', 7, 2), ('b', 7, 3)] 
sorted = [('a', 4, 2), ('b', 4, 2), ('a', 4, 3), ('b', 4, 3), ('a', 7, 2), ('b', 7, 2), ('a', 7, 3), ('b', 7, 3)] 

Tôi biết làm thế nào để sắp xếp chúng vào các yếu tố thứ hai:

sorted(unsorted, key = lambda element : element[1]) 

Nhưng làm thế nào để làm điều đó với hai phím?

+2

Việc phân loại được thực hiện bởi Python là ổn định, có nghĩa là bạn có thể sắp xếp nó hai lần, trước tiên trên phần tử quan trọng nhất, sau đó trên phần tử quan trọng nhất. Trong một số trường hợp, điều này thực tế có thể nhanh hơn (nhưng chỉ một số lần). –

Trả lời

38
sorted(unsorted, key=lambda element: (element[1], element[2])) 

Tôi đã giả định thứ tự các khóa từ đầu ra mẫu.

+2

Có thể được sắp xếp (phần tử unsorted, key = lambda: (phần tử [1:])) hoặc sắp xếp (phần tử unsorted, key = lambda: (phần tử [1: 3])) tốt hơn – pod2metra

+2

@ pod2metra Có nhiều khả năng. Có lẽ tốt nhất sẽ là 'operator.itemgetter (1,2)'. –

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