2015-03-29 19 views
5

Jak uzyskać osoba z pierwszego nazwiska w następujących przypadkach:Sortuj według nazwiska

l = ['John Fine', 'Doug Biro', 'Jo Ann Alfred'] 
--> Jo Ann Alfred 

tej pory robiłem:

sorted(l, key=itemgetter(-1))[0] 

Jest to zalecany sposób to zrobić czy są lepsze alternatywy?

Odpowiedz

6

jesteś rzeczywiście sortowaniu według ostatniego nie litery nazwy, zakładając ostatnie słowo po spacji jest zawsze ostatnim użyciu nazwa dzielone: ​​

l = ['John Fine', 'Doug Biro', 'Jo Ann Alfred'] 

sorted(l, key=lambda x: x.rsplit(None,1)[-1]) 

Jeśli chcesz tylko wartość min na podstawie nazwisko użytku min:

print(min(l,key=lambda x: x.rsplit(None,1)[-1])) 

dla wykorzystania max odwrotnej.

lambda x: x.rsplit(None,1)[-1] faktycznie dzieli ciąg na ostatnie spacje i używa tej wartości jako klucza do sortowania.

4

kiedy trzeba min, min nie sort:

min(l, key=lambda x: x.rsplit(' ', 1)[1])

EDIT:

Myślę, że lepszym rozwiązaniem będzie: 1. porównać nazwisko, i 2. jeśli są równe, porównaj pierwsze. możemy osiągnąć to zachowanie z łatwością z krotkami:

min(l, key=lambda x:tuple(reversed(x.rsplit(None, 1)))) 
Powiązane problemy