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

Python dict() Function

O python me permite criar a seguinte coleção:

dicionario = {"A" : "Ameixa", "B" : "Bola", "C": "Cachorro"}

Porém ao tentar criá-la através da função dict() eu recebo um erro.

dicionario2 = dict(A=Ameixa)

NameError: name 'Ameixa' is not defined

A diferença do meu código para o da aula é que no da aula (aula 03 atividade 2) o valor (de chave:valor) era de tipo numérico.

Entendi que ali o Python procurou uma variável 'Ameixa' e não encontrou. Mas existe algo na estrutura dict que impeça o valor da minha chave ser do tipo string?

4 respostas

Acho que entendi. Como não consegui excluir o tópico, vou deixar o que eu acho.

A chave não tem tipo e eu não preciso colocar aspas ou apóstrofos ao inserir um texto (A, no caso). Porém o valor tem tipos e o uso destas é obrigatório em casos tipo String.

dict(A='Ameixa')

O que está ocorrendo no seu código é um erro de sintaxe. Strings no Python precisam sempre estar encapsuladas entre aspas, simples( ' ' ) ou duplas ( " " ). Não importa qual, existem as duas opções para que possa incluir aspas dentro da sua string sem que isso confunda o interpreter, basta usar aspas diferentes daquelas usadas dentro do texto da string.

dicionario2 = dict( A = 'Ameixa')

Dessa maneira o código ira criar um dicionário corretamente.

solução!

Na verdade é um pouco mais complexo, mas entendo que a dúvida venha da sintaxe dessa função dict().Chaves e valores sempre tem tipos, usando a terminologia do Python, são sempre instâncias de uma classe. Seja int, string, bool, etc. Inclusive podem ser listas e até mesmo dicionários.

Um outro método de criar um dicionário é esse:

dict = {}
dict['A'] = 'Ameixa'

Nessa forma você cria uma variável dict que contém um dicionário vazio e definimos um valor para uma chave dentro desse dicionário. Caso já haja uma chave 'A' ela receberia o valor 'Ameixa', mas como não há o python cria uma nova entrada no dicionário.

A função dict() quando usada nessa sintaxe não está recebendo chaves e valores, mas sim variáveis com valores atribuídos a elas. Internamente ele captura o nome dessa variável e usa como chave e o valor da variável é usado como valor associado a chave.

Assim, se fizermos dessa forma:

A = 'Ameixa'

dicionário2 = dict(A)

O resultado será o mesmo. Sempre que houver uma palavra sem aspas no Python ele irá tratar essa palavra como uma variável.

A função recebe uma variável e internamente usa como chave. Isso explica minha confusão.

Obrigado por esclarecer.