Olá, Mário! Como vai?
O código:
funcionarios = {'José': 2000, 'Ana': 2200,'João': 2500, 'Maria': 3800}
try:
aumento = list(map(lambda x: x[1] * 1.1, funcionarios.values()))
except Exception as e:
print(type(e), f'Erro: {e}')
else:
print(aumento)
finally:
print("Processo concluido!")
Não funciona porque você está tentando acessar o índice [1]
do valor de x
em lambda x: x[1]
.
E já que você está iterando sobre funcionarios.values()
, a variável x
é cada valor de funcionarios
: 2000
, 2200
e 3000
.
Sendo que cada valor desse é do tipo int (inteiro), logo não pode ser subdivido em índices (como é possível com strings e listas). Por isso o erro <class 'TypeError'> Erro: 'int' object is not subscriptable
é gerado. Traduzindo: O objeto 'int' não é subscritível.
Então a correção para esse código seria:
funcionarios = {'José': 2000, 'Ana': 2200,'João': 2500, 'Maria': 3800}
try:
aumento = list(map(lambda x: x * 1.1, funcionarios.values()))
except Exception as e:
print(type(e), f'Erro: {e}')
else:
print(aumento)
finally:
print("Processo concluido!")
Agora sim, a variável x
está sendo por si só cada valor dos funcionários e não estamos tentando acessar o índice de um inteiro.
Por fim, o código:
funcionarios = {'José': 2000, 'Ana': 2200,'João': 2500, 'Maria': 3800}
try:
aumento = list(map(lambda x: x[1] * 1.1, funcionarios.items()))
except Exception as e:
print(type(e), f'Erro: {e}')
else:
print(aumento)
finally:
print("Processo concluido!")
Funciona normalmente porque você está iterando sobre cada item.
E quando o código analisa o item 'José': 2000
, por exemplo, o índice [1]
é justamente o 200
.
Espero ter ajudado e fico à disposição se precisar.
Abraço e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado