python - tiene - Cortar un diccionario por claves que comienzan con una cierta cadena
frecuencia en python (3)
Esto es bastante simple, pero me encantaría una manera bonita y pitónica de hacerlo. Básicamente, dado un diccionario, devuelve el subdiccionario que contiene solo aquellas claves que comienzan con una cierta cadena.
» d = {''Apple'': 1, ''Banana'': 9, ''Carrot'': 6, ''Baboon'': 3, ''Duck'': 8, ''Baby'': 2}
» print slice(d, ''Ba'')
{''Banana'': 9, ''Baby'': 2, ''Baboon'': 3}
Esto es bastante simple de hacer con una función:
def slice(sourcedict, string):
newdict = {}
for key in sourcedict.keys():
if key.startswith(string):
newdict[key] = sourcedict[key]
return newdict
Pero seguramente hay una solución más agradable, más inteligente y más legible? ¿Podría un generador ayudar aquí? (Nunca tengo suficientes oportunidades para usarlos).
En Python 3 use items()
lugar:
def slicedict(d, s):
return {k:v for k,v in d.items() if k.startswith(s)}
En estilo funcional:
dict(filter(lambda item: item[0].startswith(string),sourcedict.iteritems()))
Qué tal esto:
en python 2.x:
def slicedict(d, s):
return {k:v for k,v in d.iteritems() if k.startswith(s)}
En python 3.x:
def slicedict(d, s):
return {k:v for k,v in d.items() if k.startswith(s)}