2015-12-09 14 views
6

mam słownika {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}Sortuj słownika przez wielu wartości

muszę uporządkować tego słownika pierwszy numerycznie, to w tym, w porządku alfabetycznym. Jeśli 2 elementy mają ten sam numer, muszą być posortowane alfabetycznie.

Wyjście to powinno być Bob, Alex, Bill, Charles

Próbowałem za pomocą lambda listowych, etc, ale nie wydaje się uzyskać je do sortowania poprawnie.

Odpowiedz

11

Korzystanie sorted z funkcją przycisku (zamówienia przez wartość (d[k]), następnie klawisz k):

>>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}  
>>> sorted(d, key=lambda k: (d[k], k)) 
['Bob', 'Alex', 'Bill', 'Charles'] 
4

Posortuj elementy słownika (które są krotkami) za pomocą sorted(). Można określić klucz sortowania, który będzie się wartościami słownika, a następnie jego klawisze:

>>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7} 
>>> sorted(d.items(), key=lambda x:(x[1],x[0])) 
[('Bob', 3), ('Alex', 4), ('Bill', 4), ('Charles', 7)] 
>>> [t[0] for t in sorted(d.items(), key=lambda x:(x[1],x[0]))] 
['Bob', 'Alex', 'Bill', 'Charles'] 
Powiązane problemy