No, è necessario rimuoverli manualmente. Utilizzando itertools.dropwhile()
fa che un po 'più facile, forse:
from itertools import dropwhile
for key, count in dropwhile(lambda key_count: key_count[1] >= 15, main_dict.most_common()):
del main_dict[key]
Dimostrazione:
>>> 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})
Utilizzando dropwhile
avete solo bisogno di testare le chiavi per i quali il conteggio è 15 o sopra; dopo di ciò, rinuncerà ai test e passerà attraverso tutto. Ciò funziona alla grande con l'elenco ordinato most_common()
. Se ci sono molti valori inferiori a 15, ciò consente di risparmiare tempo di esecuzione per tutti quei test.
fonte
2013-04-07 11:18:37
non vedo il punto in 'dropwhile' per questo caso – jamylak
anche' 'bar'' non dovrebbero essere eliminati in quanto la sua frequenza non è inferiore a 15. In realtà questa idea può funzionare in in un modo diverso, ma non proprio per cancellare le chiavi. per esempio. 'new_dict = dict (takewhile (lambda x: x [1]> = 15, main_dict.most_common()))' – jamylak
@jamylak: 'dropwhile' interrompe il test una volta interrotta la corrispondenza; per un gran numero di chiavi che fa la differenza. Approfondirò l'errore più tardi. –