How to browse a dictionary within a python list?

Asked

Viewed 95 times

-2

I have the following JSON:

{
    "Aeroportos": [
        {
            "Continente": "Europa",
            "País": "Grécia",
            "Localização": "Atenas",
            "Nome": "Aeroporto Internacional Eleftherios Venizelos - Atenas, Grécia (ATH)",
            "IATA": "ATH"
        },
        {
        "Continente": "Europa",
        "País": "Reino Unido",
        "Localização": "Londres",
        "Nome": "Aeroporto Internacional de Heathrow",
        "IATA": "LHR"
        },
        {
        "Continente": "Europa",
        "País": "Reino Unido",
        "Localização": "Londres",
        "Nome": "Aeroporto Internacional Gatwick",
        "IATA": "LGW"
        },
        {
            "Continente": "Europa",
            "País": "Turquia",
            "Localização": "Istambul",
            "Nome": "Aeroporto Internacional Ataturk - Istambul, Turquia (IST)",
            "IATA": "IST"
        },
        {
            "Continente": "Europa",
            "País": "Croácia",
            "Localização": "Zagreb",
            "Nome": "Aeroporto Internacional Pleso - Zagreb, Croácia (ZAG)",
            "IATA": "ZAG"
        } 
]}

And I would like to look at each "Location", if I find a certain city, like "Athens", and return the "Name", but I’m not getting.

import json

with open('iata.json', encoding='utf-8-sig') as aeroportos:
    iata = json.load(aeroportos)

This part I can access the file, has several other airports, hence I would like to locate the names knowing that it may return more than 1 airport in the same city.

1 answer

2


It gets easier if you understand the structure of a JSON (and it’s not that hard):

  1. You have an object (because it is bounded by { }), which has a single key called "Airports".
  2. The value of this key is an array as it is bounded by [ ]
  3. Each element of this array is another object (because they are bounded by { })
  4. And each of these objects has the key "Location"

That is to say:

{  <-- chaves que abre o objeto principal (item 1 acima)
    "Aeroportos": [ <-- chave "Aeroportos", cujo valor é um array (item 2)
        { <-- primeiro objeto que está dentro do array (item 3)
            "Continente": "Europa",
            "País": "Grécia",
            "Localização": "Atenas",  <-- chave "Localização" do primeiro objeto (item 4)
            "Nome": "Aeroporto Internacional Eleftherios Venizelos - Atenas, Grécia (ATH)",
            "IATA": "ATH"
        },  <-- "}" fecha o primeiro objeto, vírgula separa os elementos do array
        { <-- segundo objeto que está dentro do array (item 3)
            "Continente": "Europa",
            "País": "Reino Unido",
            "Localização": "Londres",  <-- chave "Localização" do segundo objeto (item 4)
            "Nome": "Aeroporto Internacional de Heathrow",
            "IATA": "LHR"
        },  <-- "}" fecha o segundo objeto, vírgula separa os elementos do array
        ...

The mapping of a JSON to Python objects is done according to this table. Basically, objects are converted into dictionaries, and arrays into lists.

Then you just need to take the key "Airports" of the main object (whose value is a list), scroll through it and see which elements have the value of the "Location" you want:

import json

with open('iata.json', encoding='utf-8-sig') as arquivo:
    iata = json.load(arquivo)
    for aeroporto in iata['Aeroportos']:
        if aeroporto['Localização'] == 'Atenas':
            print(aeroporto['Nome'])

iata['Aeroportos'] gets the list of airports. No for i go through the objects of this list, and see if the location of the same is "Athens". If it is, I print the name.


If you want, you can do a function that receives the list of airports and returns those you have in a given city:

# retorna uma lista contendo os nomes dos aeroportos de determinada cidade
def aeroportos_por_cidade(aeroportos, cidade):
    return [ aeroporto['Nome'] for aeroporto in aeroportos if aeroporto['Localização'] == cidade ]

import json

with open('iata.json', encoding='utf-8-sig') as arquivo:
    iata = json.load(arquivo)
    aeroportos = iata['Aeroportos']

print(aeroportos_por_cidade(aeroportos, 'Atenas')) # ['Aeroporto Internacional Eleftherios Venizelos - Atenas, Grécia (ATH)']
print(aeroportos_por_cidade(aeroportos, 'Londres')) # ['Aeroporto Internacional de Heathrow', 'Aeroporto Internacional Gatwick']

For the above function I used the syntax of comprehensilist on, but if you want you can also do so:

def aeroportos_por_cidade(aeroportos, cidade):
    nomes = []
    for aeroporto in aeroportos:
        if aeroporto['Localização'] == cidade:
            nomes.append(aeroporto['Nome'])
    return nomes
  • 1

    great explanation. Hug. + 1.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.