Tengo un diccionario de nombres de calles y sus valores, como tú. Las claves son cadenas, los valores son ints. Quiero escribir un pequeño fragmento de código que me permita imprimir todos los nombres de calles que terminen con "gatan" usando una expresión regular.
dictionary = {Storgatan: 46, Talgvägen: 51, Malmstigen: 8, Huvudgatan: 3...}
import re
ends_with= 'gatan$'
test_dictionary= dictionary
m1 = re.match(ends_with,test_dictionary)
if m1 is not None:
print(m1)
Sin embargo, esto devuelve el error "cadena esperada u objeto similar a bytes".
¿Cómo resuelvo esto fácilmente? Gracias
3 respuestas
Si debe usar expresiones regulares, puede usar re.match
mientras itera sobre el diccionario.
import re
dictionary = {'Storgatan': 46, 'Talgvägen': 51, 'Malmstigen': 8, 'Huvudgatan': 3}
regex = '.*gatan$'
results = [v for k, v in dictionary.items() if re.match(regex, k)]
print(results)
Salida:
[46, 3]
N.B: Esto será lento para diccionarios grandes
Si solo quieres los nombres clave:
matching_keys = [k for k in dictionary if re.match(regex, k)]
Simplemente, podemos usar key.endswith('gatan')
así:
for key, val in dictionary.items():
if isinstance(key, str) and not key.endswith('gatan'):
# key not ending with `gatan`
print(key, val)
Si desea crear otro diccionario, entonces podemos hacerlo en una línea como esta:
filtered_dictionary = {key: val for key, val in dictionary.items() if not key.endswith('gatan')}
Eche un vistazo a la documentación de la match
. Verá que la función espera una estructura de datos string
, no una dict
.
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.