Search code examples
pythonnamedtuple

Getting Syntax Error in Keyword Class Patterns


City class and a few instances

import typing

class City(typing.NamedTuple):
    continent: str
    name: str
    country: str


cities = [
    City('Asia', 'Tokyo', 'JP'),
    City('Asia', 'Delhi', 'IN'),
    City('North America', 'Mexico City', 'MX'),
    City('North America', 'New York', 'US'),
    City('South America', 'São Paulo', 'BR'),
]

The following function should return a list of Asian cities:

def match_asian_cities():
    results = []
    for city in cities:
        match city:
            case City(continent='Asia'):
                results.append(city)
    return results

But on calling match_asian_cities() I am getting SyntaxError: invalid syntax

SyntaxError: invalid syntax (Temp/ipykernel_5228/716370306.py, line 20)
  File "C:\Users\LENOVO\AppData\Local\Temp/ipykernel_5228/716370306.py", line 20
    match city:
          ^
SyntaxError: invalid syntax

Need help to fix this. Thanks!


Solution

  • how about the below

    import typing
    
    class City(typing.NamedTuple):
        continent: str
        name: str
        country: str
    
    
    cities = [
        City('Asia', 'Tokyo', 'JP'),
        City('Asia', 'Delhi', 'IN'),
        City('North America', 'Mexico City', 'MX'),
        City('North America', 'New York', 'US'),
        City('South America', 'São Paulo', 'BR'),
    ]
    
    asian = [c for c in cities if c.continent == 'Asia']
    print(asian)
    

    output

    [City(continent='Asia', name='Tokyo', country='JP'), City(continent='Asia', name='Delhi', country='IN')]