2010-10-05 7 views
2

Je me demandais comment faire pour que python puisse ordonner ma collection de tuples afin que les premiers éléments similaires apparaissent regroupés et les groupes classés par premier élément.tri par premier élément de groupe en python

order group 
3  1 
4  2 
2  2 
1  1 

après tri

order group 
1  1 
3  1 
2  2 
4  2 

liste Python

unordered = [(3, 1), (4, 2), (2, 2), (1, 1)] 

Répondre

16

Je suppose que vous vouliez dire unordered = [(3, 1), (4, 2), (2, 2), (1, 1)] parce que cette partie de votre exemple que vous avez tapé, il est incompatible avec les deux autres, non?

Si oui, alors

>>> import operator 
>>> sorted(unordered, key=operator.itemgetter(1,0)) 
[(1, 1), (3, 1), (2, 2), (4, 2)] 

ou de la même unordered.sort(key=operator.itemgetter(1,0)) si vous vouliez trier en place (qui donne le nom de la variable que je suis sûr que vous ne pas - ce serait sérieusement bizarre de nommer un variable "non ordonnée" si elle est destinée à être commandée! -).

+0

Oui, je voulais dire (1, 1). J'ai corrigé la question –

+0

Merci, cela a fonctionné comme un charme –

+0

Vous pourriez aussi, dans ce cas particulier, trier avec key = lambda (a, b): (b, a). Le tri naturel des tuples de Python commence par le terme le plus à gauche et se déplace vers la droite; vous essayez de trier dans la direction opposée. –