• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

143
Vistas
Coincidencia de patrones de Python 3.10 (PEP 634): comodín en cadena

Obtuve una gran lista de objetos JSON que quiero analizar según el inicio de una de las claves, y solo comodín el resto. Muchas de las claves son similares, como "matchme-foo" y "matchme-bar" . Hay un comodín incorporado, pero solo se usa para valores completos, como un else .

Podría estar pasando por alto algo, pero no puedo encontrar una solución en ninguna parte de la propuesta:

https://docs.python.org/3/whatsnew/3.10.html#pep-634-structural-pattern-matching

También un poco más sobre esto en PEP-636:

https://www.python.org/dev/peps/pep-0636/#going-to-the-cloud-mappings

Mis datos se ven así:

 data = [{ "id" : "matchme-foo", "message": "hallo this is a message", },{ "id" : "matchme-bar", "message": "goodbye", },{ "id" : "anotherid", "message": "completely diffrent event" }, ...]

Quiero hacer algo que pueda coincidir con la identificación sin tener que hacer una larga lista de | 's.

Algo como esto:

 for event in data: match event: case {'id':'matchme-*'}: # Match all 'matchme-' no matter what comes next log.INFO(event['message']) case {'id':'anotherid'}: log.ERROR(event['message'])

Es una adición relativamente nueva a Python, por lo que aún no hay muchas guías sobre cómo usarlo.

about 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puedes usar un protector :

 for event in data: match event: case {'id': x} if x.startswith("matchme"): # guard print(event["message"]) case {'id':'anotherid'}: print(event["message"])

Citando de la documentación oficial ,

Guardia

Podemos agregar una cláusula if a un patrón, conocida como "guardia". Si la guardia es false , el partido continúa para intentar el siguiente bloque de case . Tenga en cuenta que la captura de valor ocurre antes de que se evalúe el guardia:

 match point: case Point(x, y) if x == y: print(f"The point is located on the diagonal Y=X at {x}.") case Point(x, y): print(f"Point is not on the diagonal.")

Ver también:

  • PEP 622 - Guardias
  • PEP 636 - Adición de condiciones a los patrones
  • PEP 634 - Guardias
about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda