Nie, musisz usunąć je ręcznie. Korzystanie itertools.dropwhile()
sprawia, że trochę łatwiej może:
from itertools import dropwhile
for key, count in dropwhile(lambda key_count: key_count[1] >= 15, main_dict.most_common()):
del main_dict[key]
Demonstracja:
>>> main_dict
Counter({'baz': 20, 'bar': 15, 'foo': 10})
>>> for key, count in dropwhile(lambda key_count: key_count[1] >= 15, main_dict.most_common()):
... del main_dict[key]
...
>>> main_dict
Counter({'baz': 20, 'bar': 15})
Korzystając dropwhile
, wystarczy przetestować klucze, w których liczba wynosi 15 lat; po tym zrezygnuje z testowania i po prostu przejdzie przez wszystko. Działa to świetnie z posortowaną listą most_common()
. Jeśli jest dużo wartości poniżej 15, to oszczędza czas wykonania wszystkich tych testów.
Nie widzę sensu w 'dropwhile' dla – jamylak
także' 'bar'' nie powinien być usunięty tym przypadku, ponieważ jego częstotliwość wynosi nie mniej niż 15. To właśnie ta idea może pracować w w inny sposób, ale tak naprawdę nie do usuwania kluczy. na przykład. 'new_dict = dict (takewhile (lambda x: x [1]> = 15, main_dict.most_common()))' – jamylak
@jamylak: 'dropwhile' przestaje testować, gdy przestanie pasować; dla dużej liczby kluczy, która robi różnicę. Zbadam błąd później. –