Ho avuto una breve domanda sull'efficienza della ricerca tramite i dizionari grandi in in Python. Sto leggendo un grande file separato da virgola e ricevo una chiave e un valore da ogni riga. Se la mia chiave è già nel dizionario, aggiungo il valore al valore elencato nel dizionario, se la chiave non esiste nel dizionario, aggiungo semplicemente il valore. In precedenza ero utilizzare questo:Ricerca efficiente del dizionario?
if key in data_dict.keys():
add values
else:
data_dict[key] = value
Questo inizia piuttosto veloce, ma come il dizionario cresce diventa sempre più lento, al punto in cui non posso usarlo affatto. Ho cambiato il mio modo di cercare la chiave nel dizionario a questo:
try:
# This will fail if key not present
data_dict[keyStr] = input_data[keyStr] + load_val
except:
data_dict[keyStr] = load_val
Questa è infinitamente più veloce, e in grado di leggere/scrivere oltre 350.000 linee di codice in 3 secondi.
La mia domanda era: perché il comando if key in data_dict.keys():
richiede molto più tempo della chiamata a try: data_dict[keyStr]
? E perché Python non dovrebbe utilizzare l'istruzione try
durante la ricerca di una chiave in un dizionario?
In generale, non si desidera rilevare _all_eccezioni, ma solo quella che "si aspetta" e gestirà una volta trovata. Qui, ad esempio, usa: 'except KeyError: ...' – askewchan
Il tuo codice di esempio è confuso. Nel primo frammento si sta verificando che la 'chiave' si trova in' data_dict', ma nella seconda l'unica cosa che ti darebbe un'eccezione 'KeyError' sarebbe se la' chiave' non fosse in 'input_data'. Ciò rende difficile fornire una risposta completa ... – martineau