[Python-es] "Reducir" un diccionario usando un subconjunto de claves
Arnau Sanchez
pyarnau en gmail.com
Sab Mayo 1 10:39:19 CEST 2010
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.
Más información sobre la lista de distribución Python-es