[Python] Quale tra dict, tuple e oggetti collections risulta essere il più performante?

lex mlist lexmlist a gmail.com
Ven 10 Dic 2010 13:55:45 CET


Buondì,

la mia situazione è più o meno questa:
ho un dizionario in input di lunghezza indefinita (non ho proprio modo di
sapere a priori quale sarà il limite massimo, essendo un insieme di elementi
in cui fare una ricerca).

Ho poi la necessità di fare, in base ad altri dati in input, numerose
ricerche sul dizionario. La ricerca la faccio semplicemente comparando la
chiave, e in caso di match restituire il valore.
In altri linguaggi avrei pensato prima di tutto ad ottimizzare l'algoritmo
di ricerca, ma in python faccio semplicemente uso di 'x in dict.keys()'
Mi chiedevo quindi, essendo il numero di ricerche davvero molto elevato (ed
essendo il numero di elementi dell'insieme virtualmente illimitato), ci sono
oggetti che risultano essere più performanti del dizionario sia per la
ricerca che per l'estrazione di un valore?
Potrei organizzare una tupla assumendo alcune convenzioni (per esempio, sui
numeri dispari ci sono le chiavi, su quelli pari ci sono i valori, cosi da
ricavare la posizione della chiave, aggiungere uno e ricavare il valore).

Ho fatto dei test e ho visto che la set() risulta essere la più performante
ma purtroppo io ho la necessità di ricavare la posizione degli elementi (per
estrarre poi il valore collegato alla chiave) e quindi non posso usarla, poi
ho visto gli oggetti del modulo collections ma non li ho testati.

La chiave deve essere unica (quindi se l'oggetto in questione lo richiede
non è un problema), se l'oggetto non fà il controllo lo posso fare
tranquillamente io quando converto (eventualmente) il dizionario in un
oggetto che mi dà maggiori benefici in termini prestazionali.

Tutti i suggerimenti sono ben graditi,
buona giornata a tutti.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20101210/4e7ad899/attachment.html>


Maggiori informazioni sulla lista Python