supponiamo di avere un dizionario le cui chiavi sono stringhe. Come posso creare in modo efficiente un nuovo dizionario da quello che contiene solo le chiavi presenti in qualche elenco?Selezione degli elementi del dizionario per chiave in modo efficiente in Python
ad esempio:
# a dictionary mapping strings to stuff
mydict = {'quux': ...,
'bar': ...,
'foo': ...}
# list of keys to be selected from mydict
keys_to_select = ['foo', 'bar', ...]
Il modo in cui mi è venuto in mente è:
filtered_mydict = [mydict[k] for k in mydict.keys() \
if k in keys_to_select]
ma penso che questo è altamente inefficiente, perché: (1) che richiede l'enumerazione dei tasti con i tasti() (2) richiede ogni volta k in keys_to_select. almeno uno di questi può essere evitato, penserei. qualche idea? Posso usare anche scipy/numpy se necessario.
Quando si utilizza "se k in mydict" come questo, non Python esegue un tipo has_key ricerca, o lo fa trasformare le chiavi in un elenco/iterabile e anello su di loro? Se è il secondo, "se mydict.has_key (k)" potrebbe essere più efficiente, no? (Non ho ancora trovato alcuna documentazione per chiarire, in entrambi i casi. Le competenze di Google mi hanno deluso). – pycruft
Per rispondere alla mia domanda, usare "k in dict" è identico all'utilizzo di "dict.has_key (k)" secondo http://www.python.org/dev/peps/pep-0234/ – pycruft
@pycruft, sì , e, come 'timeit' cqn confirm (' python -mtimeit -s'd = dict.fromkeys (range (99)) ''23 in d'' etc), 'in' è, infatti, circa il doppio della velocità come 'has_key' (salva ogni volta una ricerca attributo con nome, che è circa la stessa operazione di un dt loolup). Non c'è mai alcun motivo per usare 'has_key', ed è stato rimosso da Python 3. –