[Python-es] "Reducir" un diccionario usando un subconjunto de claves

Francesc Alted faltet en pytables.org
Sab Mayo 1 11:40:10 CEST 2010


A Saturday 01 May 2010 10:39:19 Arnau Sanchez escrigué:
> On 01/05/10 00:51, Rolando Espinoza La Fuente wrote:
> >> %timeit dict((k, d[k]) for k in subkeys)
> >> 100000 loops, best of 3: 6.99 µs per loop
> >
> > %timeit dict([(k, d[k]) for k in subkeys])
> > 100000 loops, best of 3: 5.82 µs per loop
> 
> Pero esto hay que explicarlo: con pocos elementos una lista por compresión
>  será (normalmente) más rápida, pero si tenemos muchos ya no está tan
>  claro:
> 
> d = dict((k, 2*k) for k in xrange(100000))
> 
> %timeit dict([(k, d[k]) for k in xrange(0, 100000, 2)])
> 10 loops, best of 3: 23.9 ms per loop
> 
> %timeit dict((k, d[k]) for k in xrange(0, 100000, 2))
> 100 loops, best of 3: 16.8 ms per loop
> 
> En cualquier caso, la principal ventaja de los generadores está en espacio,
>  no en tiempo.

Sí señor, la memoria es un bien escaso, que conviene conservar.  Y cada vez 
más, debido al abismo que se abre entre acceso a memoria y velocidad de CPU, 
espacio ganado se traduce en tiempo reducido.

-- 
Francesc Alted



Más información sobre la lista de distribución Python-es