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

Francisco Javier Cuadrado fcocuadrado en gmail.com
Vie Abr 30 13:45:14 CEST 2010


El día 30 de abril de 2010 13:39, Arnau Sanchez <pyarnau en gmail.com> escribió:
> On 30/04/10 13:21, Francisco Javier Cuadrado wrote:
>
>> d = {'nombre:'pepe', 'apellidos':'garcia lopez', 'edad':30,
>> 'profesión':'futbolista'}
>>
>> Del cual quiero obtener otro diccionario que contenga un subconjunto
>> de las claves/valores del anterior, por ejemplo quedarme sólo con el
>> nombre y los apellidos:
>>
>> dic_resultante = {'nombre':'pepe', 'apellidos':'garcia lopez'}
>
> Puedes usar una expresión generador + constructor dict():
>
> def dict_filter_keys(d, keys):
>    return dict((key, d[key]) for key in keys)
>

Ya sabía yo que había soluciones mejores, gracias.

> d = {'nombre' :'pepe', 'apellidos':'garcia lopez', 'edad':30,
>    'profesion':'futbolista'}
>
> print dict_filter_keys(d, ["nombre", "edad"])
> # {'edad': 30, 'nombre': 'pepe'}
>
> Siempre que hagas "inicialización a vacío ([], {}) + bucle + añadir valores"
> estás implementando una solución no-funcional, algo que por norma general
> hay que evitar.

Podrías explicarme esto un poco más, supongo que te refieres a que
cuando me encuentre algo así:

d = {}
for k in [1,2,3,4]:
  d[k] = k

Es mejor hacer:

d = dict ((k, k) for k in [1,2,3,4])

Cosa que ahora veo clarísima.


-- 
Saludos

Fran



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