Saltar al contenido

filtrar elementos en un diccionario de python donde keys contener un especifico string

Luego de de esta larga selección de información dimos con la respuesta esta cuestión que pueden tener ciertos de nuestros usuarios. Te brindamos la respuesta y deseamos servirte de mucha apoyo.

Solución:

¿Qué tal una comprensión dict:

filtered_dict = k:v for k,v in d.iteritems() if filter_string in k

Una vez que lo vea, debería explicarse por sí mismo, ya que se lee bastante bien en inglés.

Esta sintaxis requiere Python 2.7 o superior.

En Python 3, solo hay dict.items()no iteritems() entonces usarías:

filtered_dict = k:v for (k,v) in d.items() if filter_string in k

Elija lo que sea más legible y fácil de mantener. El hecho de que pueda escribirlo en una sola línea no significa que deba hacerlo. Su solución existente está cerca de lo que usaría, excepto que usaría iteritems para omitir la búsqueda de valor, y odio los if anidados si puedo evitarlos:

for key, val in d.iteritems():
    if filter_string not in key:
        continue
    # do something

Sin embargo, si realmente quiere algo que le permita iterar a través de un dictado filtrado, entonces no haría el proceso de dos pasos de construir el dictado filtrado y luego iterarlo, sino usar un generador, porque lo que es más pitónico (y asombroso) que un generador?

Primero creamos nuestro generador, y un buen diseño dicta que lo hagamos lo suficientemente abstracto como para que sea reutilizable:

# The implementation of my generator may look vaguely familiar, no?
def filter_dict(d, filter_string):
    for key, val in d.iteritems():
        if filter_string not in key:
            continue
        yield key, val

Y luego podemos usar el generador para resolver su problema de manera agradable y limpia con un código simple y comprensible:

for key, val in filter_dict(d, some_string):
    # do something

En resumen: los generadores son impresionantes.

Puede usar la función de filtro incorporada para filtrar diccionarios, listas, etc. según condiciones específicas.

filtered_dict = dict(filter(lambda item: filter_str in item[0], d.items()))

La ventaja es que puede usarlo para diferentes estructuras de datos.

Aquí tienes las reseñas y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *