2012-03-13 16 views
6

Mam proste pytanie (przynajmniej tak mi się zdawało).jak usunąć klucz ze słownika o najwyższej wartości?

Mam słownika, powiedzmy, że wygląda to tak:

dict = {'A':100, 'a':10, 'T':50, 't':5} 

ja po prostu chcesz usunąć klucz z najwyższą wartością. Próbowałem:

del max(dict.values()) 

i jest to komunikat o błędzie: "Błąd składni: nie można usunąć wywołania funkcji". chcę końcowy wynik będzie:

dict = {'a':10, 'T':50, 't':5} 

Odpowiedz

9

max(d.values()) daje maksymalną wartość (100), ale aby usunąć wpis z słownika trzeba odpowiedni klawisz ('A').

Można to zrobić:

d = {'A':100, 'a':10, 'T':50, 't':5} 
key_to_delete = max(d, key=lambda k: d[k]) 
del d[key_to_delete] 

Nawiasem mówiąc, nie należy wymienić słownika dict bo to nazwa wbudowanego typu.

Jeżeli tam może być wiele wpisów o tej samej wartości maksymalnej i chcesz usunąć wszystkie z nich:

val_to_delete = max(d.values()) 
keys_to_delete = [k for k,v in d.iteritems() if v==val_to_delete] 
for k in keys_to_delete: 
    del d[k] 
+0

Zamiast "lambda", możliwe jest również użycie 'd .__ getitem__'. –

+1

@Michael: Prawda, lub 'd.get' jak w innej odpowiedzi. – interjay

8

Trzeba się trzymać klucza do wartości max.

Spróbuj to zamiast:

del d[max(d, key=d.get)] 

Ponadto, należy unikać wywoływania zmienna dict ponieważ cienie wbudowany w nazwie.

Powiązane problemy