2017-10-12 3 views
1

J'ai la liste ci-dessous des tuple:Tri mes articles multiples dans un tuple

[(6,7),(0,1),(2,4),(3,5),(2,3)]

je dois d'abord trier tuple par leur premier élément alors si le premier élément est le même que je dois trier par le deuxième élément dans l'ordre décroissant.

Ainsi, la sortie doit être: [(0, 1), (2, 4), (2, 3), (3, 5), (6, 7)]

J'ai essayé le code ci-dessous pour le double tri:

from operator import itemgetter 
intervals = [(6,7),(0,1),(2,4),(3,5),(2,3)] 
sorted_intervals = sorted(sorted(intervals,key=itemgetter(0)),key=itemgetter(1),reverse=True) 
print (sorted_intervals) 

Mais il produit une sortie comme:

[(6, 7), (3, 5), (2, 4), (2, 3), (0, 1)]

qui est pas ce Je m'attends à.

Quelqu'un peut-il savoir comment résoudre ce problème?

Répondre

-2

vous pouvez y arriver par donner la valeur négative du second élément

data = [(6,7),(0,1),(2,4),(3,5),(2,3)] 
    print sorted(data, key=lambda x: (x[0],-x[1])) 

sortie:

[(0, 1), (2, 4), (2, 3), (3, 5), (6, 7)] 
+0

Malheureusement, la sortie de ce code est encore '[(0, 1), (2, 3), (2, 4), (3, 5), (6, 7)] ', ce qui n'est pas ce que veut l'OP – Ajax1234

+0

C'est vrai. Je veux qu'il soit trié par ordre inverse la prochaine fois seulement pour (2,3) et (2,4) –

+0

@SubhayanBhattacharya a changé – galaxyan