1
resposta

Diferença entre elemento

Tenho uma dúvida nesse código aqui:

for elemento in dicionario.keys():
    print(elemento, dicionario[elemento])

o .keys nao seria a mesma coisa que o elemento? pq o elemento ele vira o mesmo resultado que o .values()?

1 resposta

Olá! Tudo bem? Em um dicionário, você tem as chaves, que podem ser acessadas através do método .keys(), e os valores que você pode acessar através de uma chave específica ou através do método .values(), veja alguns exemplos:

dicionario = {0: "zero", 1: "um", 2: "dois"}

print(dicionario.keys()) # [0, 1, 2]
print(dicionario.values()) # ["zero", "um", "dois"]

Enquanto o .keys() retorna só os índices, o .values() retorna só os valores. Se você precisar das duas informações ao mesmo tempo, você pode iterar sobre o dicionário usando o for, assim como no código que você mostrou:

dicionario = {0: "zero", 1: "um", 2: "dois"}

for elemento in dicionario.keys():
    print(elemento, dicionario[elemento])
    
# Resultado:
# 0 zero
# 1 um
# 2 dois

A cada iteração a variável elemento representa um índice do dicionário (no caso: 0, 1 e 2), enquanto o acesso dicionario[elemento] está buscando o valor dentro do dicionário (no caso: zero, um e dois). Porém tem outro jeito de fazer isso:

dicionario = {0: "zero", 1: "um", 2: "dois"}

for elemento in dicionario:
    print(elemento, dicionario[elemento])

O resultado é o mesmo do outro bloco de código, porque quando você usa um for para iterar um dicionário, por padrão os índices vão ser utilizados, gerando a mesma saída do que a opção com .keys(). Para resumir, o .keys() do código que você colocou aqui está retornando somente as chaves (índices), que estão sendo usados dentro do for para acessar os valores do dicionário. Existe outra forma de ter esse mesmo resultado, porém um pouco mais complexa:

dicionario = {0: "zero", 1: "um", 2: "dois"}

for chave, valor in zip(dicionario.keys(), dicionario.values()):
    print(chave, valor)

O código acima tem o mesmo resultado dos outros, a diferença é aqui estamos iterando sobre as chaves e os valores ao mesmo tempo, usando a função zip do python. Espero ter ajudado!