-2

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!

Faisal Nazik
  • 2,367
  • 4
  • 17
  • 40

2 Answers2

2

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')]
balderman
  • 22,927
  • 7
  • 34
  • 52
1

match feature is introduced in python 3.10.0rc1. If this version of python available in your system then you can try that. So, for now you can try following code snippet.

Code:

import typing

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


def match_asian_cities(cities):
    results = [city for city in cities if city.continent == 'Asia']
    return results

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'),
]

print(match_asian_cities(cities))

Output:

[City(continent='Asia', name='Tokyo', country='JP'), City(continent='Asia', name='Delhi', country='IN')]
Sabil
  • 3,750
  • 1
  • 5
  • 16