[python] : trier une liste sur deux criètes (histoire de ".")

: trier une liste sur deux criètes (histoire de ".") [python] - Python - Programmation

Marsh Posté le 24-05-2012 à 17:58:44    

Bonjour à tous,
 
Je commence le python et la je suis confronté à un besoin surlequel j'aimerais bien votre avis ;)  
 
J'ai une liste qui se présente ainsi :
["tata.foobar", "toto.barfoo", "titi.foobar", "turl.barfoo", "tik.bar"]
 
 
Et j'aimerais pouvoir :
- Trier par l'information après le point
- Puis trier par l'information avant le point
 
J'ai vu que sorted() propose key=  mais je n'ai pas réussi à l'utiliser et je m'interroge si ca correspond au besoin ...
 
Devrais je décomposer ma liste en une liste de liste ?  
Par exemple : ( ("tata", foobar), ("toto","barfoo" ), ("titi","foobar" ), ("turl","barfoo" ), ("tik","bar" )
 
 
Bref je m'interroge sur la technique la plus élégante et "in the python way"
 
 
Merci d'avance !


Message édité par gug42 le 24-05-2012 à 17:59:00
Reply

Marsh Posté le 24-05-2012 à 17:58:44   

Reply

Marsh Posté le 27-05-2012 à 00:36:38    

Code :
  1. li = ["tata.foobar", "toto.barfoo", "titi.foobar", "tatau.foobar",
  2.       "turl.barfoo", "tik.bar", "tatauz.foobar", "titii.foobar",
  3.       "taka.bar", "tat.barfoo", "tak.bar"]
  4. li.sort(key = lambda x: x.split('.')[:-1])
  5. # ou bien
  6. from operator import itemgetter
  7. li.sort(key = lambda x: itemgetter(1,0)(x.split('.')))


 
la liste triée est :
 

Code :
  1. ['tak.bar', 'taka.bar', 'tik.bar', 'tat.barfoo', 'toto.barfoo', 'turl.barfoo', 'tata.foobar', 'tatau.foobar', 'tatauz.foobar', 'titi.foobar', 'titii.foobar']

Reply

Marsh Posté le 29-05-2012 à 09:31:08    

Merci !
 
Grâce à ton exemple je comprends un peu mieux les fonctions "lambda" :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed