Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

problema na prática

tenho uma lista de dicionarios em que cada um corresponde a um mes-ano e to tentando fazer uma função que selecione todos os do mesmo ano, mas nao to conseguindo, alguem consegue me ajudar?

listaRegistros = [{
        "mes_ano_referencia" : "11-2022",
        "total_habitantes" : 1000000,
        "Total_obitos": 500000
    },
    {
        "mes_ano_referencia": "10-2021",
        "total_habitantes": 1500000,
        "Total_obitos": 600000
    }
]

def pesquisarMes(listaRegistros):

    mesAno = input("Digite o mês-ano desejado.....:")

    for item in listaRegistros:
        if mesAno in item.values()[:-4]:
            print("Mês-ano..............: " , item["mes_ano_referencia"])
            print("Total de Habitantes..: " , item["total_habitantes"])
            print("Total de óbitos......:  " , item["Total_obitos"] , "\n")
        else:
            print("***** Mês-ano não cadastrado! *****")
2 respostas
solução!

Oii Thiago, como você está?

O erro TypeError: 'dict_values' object is not subscriptable ocorre quando tentamos acessar um objeto dict_values ​​em um índice específico, porém, como não se trata de uma lista e sim de um dicionário este erro é gerado. Para resolver este problema para o cenário que você apresentou, podemos capturar o valor “mes-ano” acessando a chave mes_ano_referencia, como mostro abaixo:

if mesAno in item["mes_ano_referencia"]:

Indo um pouco além, também será necessário adicionar uma verificação que informa se há registros ou não e caso não haja, imprimimos a mensagem: “Mês-ano não cadastrado!”, pois, da forma atual como está o seu código, essa mensagem pode ser impressa diversas vezes mesmo que haja registros.

Deixo abaixo o código completo com as modificações citadas.

Código completo


listaRegistros = [{
        "mes_ano_referencia" : "11-2022",
        "total_habitantes" : 1000000,
        "Total_obitos": 500000
    },
    {
        "mes_ano_referencia": "10-2021",
        "total_habitantes": 1500000,
        "Total_obitos": 600000
    },
    {
        "mes_ano_referencia": "10-2021",
        "total_habitantes": 1400000,
        "Total_obitos": 400000
    },
    {
        "mes_ano_referencia": "11-2022",
        "total_habitantes": 400000,
        "Total_obitos": 100000
    },
    {
        "mes_ano_referencia": "11-2022",
        "total_habitantes": 2500000,
        "Total_obitos": 6400000
    },
    {
        "mes_ano_referencia": "11-2022",
        "total_habitantes": 4500000,
        "Total_obitos": 100000
    }
]

def pesquisarMes(listaRegistros):

    mesAno = input("Digite o mês-ano desejado.....:")
    possui_registros = False

    for item in listaRegistros:
        if mesAno in item["mes_ano_referencia"]:
            print("Mês-ano..............: " , item["mes_ano_referencia"])
            print("Total de Habitantes..: " , item["total_habitantes"])
            print("Total de óbitos......:  " , item["Total_obitos"] , "\n")
            possui_registros = True

    if not possui_registros:
        print("***** Mês-ano não cadastrado! *****")


pesquisarMes(listaRegistros)

Resultado da busca por "11-2022":

Digite o mês-ano desejado.....:11-2022
Mês-ano..............:  11-2022
Total de Habitantes..:  1000000
Total de óbitos......:   500000 

Mês-ano..............:  11-2022
Total de Habitantes..:  400000
Total de óbitos......:   100000 

Mês-ano..............:  11-2022
Total de Habitantes..:  2500000
Total de óbitos......:   6400000 

Mês-ano..............:  11-2022
Total de Habitantes..:  4500000
Total de óbitos......:   100000 

Resultado da busca por "12-2022":

Digite o mês-ano desejado.....:12-2022
***** Mês-ano não cadastrado! *****

Espero ter ajudado. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Era exatamente isso, ajudou muito, Valeu Felippe