Home > Software engineering >  How can I add a new pair key: value in a dictionary that has a condition?
How can I add a new pair key: value in a dictionary that has a condition?

Time:10-08

I have the following dictionary:

info_processos = {
'2019.491429': {"classe": "apelação", "dias_vista": 11},
'2020.714034': {"classe": "habeas corpus", "dias_vista": 8},
'2015.695102': {"classe": "agravo de instrumento", "dias_vista": 17},
'2012.628045': {"classe": "apelação", "dias_vista": 32},
'2017.462447': {"classe": "recurso em sentido estrito", "dias_vista": 9},
'2018.518281': {"classe": "apelação", "dias_vista": 4},
}

The keys are the protocols numbers ('2019.491429', '2020.714034', '2015.695102', etc.) while the values are a subdictionary which has 2 keys ('classe' and 'dias_vista').
I want to create a new pair "prorrogado": "sim" for the keys which have the value from "dias_vista" equal or above 10 and for the others "prorrogado": "não".

I have tried using this loop method:

for key, value in info_processos.items():
  if info_processos(value["dias_vista"] >= 10):
    info_processos.update({key: {"prorrogado": "Sim"}})
  info_processos.update({key: {"prorrogado": "Não"}})

But it returned "TypeError: 'dict' object is not callable". How can I solve it?

CodePudding user response:

Just do:

import pprint

info_processos = {
'2019.491429': {"classe": "apelação", "dias_vista": 11},
'2020.714034': {"classe": "habeas corpus", "dias_vista": 8},
'2015.695102': {"classe": "agravo de instrumento", "dias_vista": 17},
'2012.628045': {"classe": "apelação", "dias_vista": 32},
'2017.462447': {"classe": "recurso em sentido estrito", "dias_vista": 9},
'2018.518281': {"classe": "apelação", "dias_vista": 4},
}


for key, inner in info_processos.items():
    inner["prorrogado"] = "Sim" if inner["dias_vista"] >= 10 else "Não"


pprint.pprint(info_processos)

Output

{'2012.628045': {'classe': 'apelação', 'dias_vista': 32, 'prorrogado': 'Sim'},
 '2015.695102': {'classe': 'agravo de instrumento',
                 'dias_vista': 17,
                 'prorrogado': 'Sim'},
 '2017.462447': {'classe': 'recurso em sentido estrito',
                 'dias_vista': 9,
                 'prorrogado': 'Não'},
 '2018.518281': {'classe': 'apelação', 'dias_vista': 4, 'prorrogado': 'Não'},
 '2019.491429': {'classe': 'apelação', 'dias_vista': 11, 'prorrogado': 'Sim'},
 '2020.714034': {'classe': 'habeas corpus',
                 'dias_vista': 8,
                 'prorrogado': 'Não'}}

The use of update is preferred for multiple keys or another dictionary.

CodePudding user response:

You should update value and not info_processos:

for key, value in info_processos.items():
    if value["dias_vista"] >= 10:
        value.update({"prorrogado": "Sim"})
    else:
        value.update({"prorrogado": "Não"})

CodePudding user response:

I guess this is what you are looking for:

for key, value in info_processos.items():
  if value["dias_vista"] >= 10:
    info_processos[key].update({"prorrogado": "Sim"})
  else:
    info_processos[key].update({"prorrogado": "Não"})
  • Related