5 votes

Aide au tri : d'abord par ceci, puis par cela

J'ai une liste de tuples que j'essaie de trier et j'aurais besoin d'aide.

Le champ que je veux trier dans les tuples ressemble à "XXX_YYYY". Je veux d'abord regrouper les valeurs XXX dans l'ordre inverse, puis, à l'intérieur de ces groupes, je veux placer les valeurs YYY dans l'ordre de tri normal. (REMARQUE : je suis tout aussi satisfait, en fait, de trier le deuxième élément du n-uplet de cette manière, dans l'ordre inverse. premier mot, ordre normal segundo .)

Voici un exemple de ce que j'ai et de ce que j'aimerais obtenir à la fin ... je ne sais pas trop comment le faire.

mylist = [
    (u'community_news', u'Community: News & Information'), 
    (u'kf_video', u'KF: Video'), 
    (u'community_video', u'Community: Video'), 
    (u'kf_news', u'KF: News & Information'), 
    (u'kf_magazine', u'KF: Magazine')
]

J'aimerais effectuer une sorte de sort() sur cette liste qui changera la sortie en :

sorted = [
    (u'kf_magazine', u'KF: Magazine'),
    (u'kf_news', u'KF: News & Information'), 
    (u'kf_video', u'KF: Video'), 
    (u'community_news', u'Community: News & Information'), 
    (u'community_video', u'Community: Video'), 
]

Je pense qu'il y a peut-être une façon pythonique de gérer cela, mais je n'arrive pas à m'y retrouver.

10voto

Ayman Hourieh Points 39435
def my_cmp(x, y):
  x1, x2 = x[0].split('_')
  y1, y2 = y[0].split('_')
  return -cmp(x1, y1) or cmp(x2, y2)

my_list = [
    (u'community_news', u'Community: News & Information'), 
    (u'kf_video', u'KF: Video'), 
    (u'community_video', u'Community: Video'), 
    (u'kf_news', u'KF: News & Information'), 
    (u'kf_magazine', u'KF: Magazine')
]

sorted_list = [
    (u'kf_magazine', u'KF: Magazine'),
    (u'kf_news', u'KF: News & Information'), 
    (u'kf_video', u'KF: Video'), 
    (u'community_news', u'Community: News & Information'), 
    (u'community_video', u'Community: Video'), 
]

my_list.sort(cmp=my_cmp)
assert my_list == sorted_list

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X