Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

236
Visualizações
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.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

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
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda