Dicionários em Python são estruturas de dados que armazenam informações em pares de chave-valor. A principal vantagem dos dicionários é a eficiência ao acessar dados, pois utilizam hashing para localização rápida.
Características dos dicionários:
- Dicionários são estruturas não ordenadas, pois não utilizam índices numéricos, sim chaves para acessar os valores
- As chaves em um dicionário devem ser únicas, pois são utilizadas para identificação e acesso aos valores, garantindo eliminação natural de duplicatas
- Criando dicionários Dicionários são definidos utilizando chaves { }, com cada par chave-valor separado por vírgula e a chave e valor separados por dois pontos.
dado_pessoa = {'nome':'João Silva','genero':'Masculino','localização':'Brasil','idade':'30'}
- Operações básicas: adicionar, remover, modificar e consultar 2.1 Adicionando elementos
dado_pessoa['telefone']=21999999999 # Adiciona um novo par chave-valor, se a chave existir, atualiza o valor
dado_pessoa.setdefault('nome','Pedro') # Se a chave existir, não modifica o valor existente, apenas adiciona se não existir
2.2 Removendo elementos
dado_pessoa.pop('nome') # Remove um item específico pela chave
dado_pessoa.popitem() # Remove um item aleatoriamente
del dado_pessoa['telefone'] # Remove um item específico pela chave
dado_pessoa.clear() # Esvazia completamente o dicionário
2.3 Modificando elementos
info_adicional ={'a':'b'}
dado_pessoa.update(info_adicional) # Mescla dicionários, adicionando elementos do segundo ao primeiro, atualizando se chaves existirem
dado_pessoa['nome']='Pedro' # Se a chave existir, modifica o valor correspondente
2.4 Consultando elementos
print(dado_pessoa.get('nome')) # Retorna None se a chave não existir
print(dado_pessoa.get('sobrenome','Desconhecido')) # Retorna valor padrão se a chave não existir
print(dado_pessoa['sobrenome']) # Gera erro se a chave não existir
2.4.1 Métodos embutidos de dicionários
print(dado_pessoa.keys())# Obtém todas as chaves do dicionário
print(dado_pessoa.values())# Obtém todos os valores do dicionário
print(dado_pessoa.items())# Obtém todos os pares chave-valor do dicionário
print(dado_pessoa.update(novas_info))# Atualiza valores do dicionário
print(dado_pessoa.items()) # Retorna uma visualização de lista (não é uma lista verdadeira)
# Resultado:
dict_items([('nome', 'João Silva'), ('genero', 'Masculino'), ('localização', 'Brasil'), ('idade', '30')])
print(list(dado_pessoa.items())) # Converte pares chave-valor do dicionário em uma lista multidimensional
# Resultado:
[('nome', 'João Silva'), ('idade', '30'), ('localização', 'Brasil'), ('genero', 'Masculino')]
- Exemplo com dicionários aninhados
usuarios = {
'usuario1':{
'idade':25,
'saldo':1000,
'roupas':'5 peças',
'hobbies':'muitos',
'sapatos':['nike','adidas','puma','converse']
},
'usuario2':{
'patrimônio':'50W',
'imoveis':['centro','periferia'],
'veiculos':{
'alemanha':['bmw','mercedes','audi'],
'japão':['toyota','honda','nissan'],
'brasil':['fusca','gol','chevette']
}
}
}
print(usuarios['usuario2']['veiculos']['brasil'][1]) # Acessa 'gol'
print(usuarios['usuario1']['idade']) # Acessa idade
a = usuarios['usuario1']['sapatos']=('sandália') # Adiciona sandália aos sapatos do usuario1
b = usuarios['usuario1']['sapatos'].append('chinelo')
print(usuarios['usuario1']['sapatos'])
- Percorrendo dicionários Ao percorrer um dicionário diretamente, itera-se sobre as chaves
for usuario in usuarios:
print(usuario)
Para obter chaves e valores simultaneamente durante a iteração:
for chave,valor in usuarios.items(): # Itera sobre chaves e valores simultaneamente
print(chave,'===>',valor)
O operador 'in' em dicionários verifcia apenas a existência de chaves
contas ={
'joao':'senha123',
'maria':'321senha'
}
print('senha123' in contas) # O operador 'in' verifica apenas chaves
# Resultado: False
- Ordenando dicionários Dicionários são estruturas não ordenadas, mas podemos ordenar seus itens
d ={'a':4,'b':2,'c':3}
# Não é possível ordenar diretamente um dicionário
print(d.items()) # Retorna uma visão de pares chave-valor
res = sorted(d.items(),key=lambda x:x[1])
# O sorted ordena com base nos valores
print(res)
for k,v in res:
print(k,v)
- Modificando chaves de dicionários Método: remover o par chave-valor original, salvar o valor, inserir com nova chave Formato: dict[nova_chave]=dict.pop(chave)
info = {'codigo':1, 'nome':"Carlos Silva"}
info['nome_completo'] = info.pop('nome')
print(info)
# Saída: {'codigo': 1, 'nome_completo': 'Carlos Silva'}
A expressão info.pop('nome') remove o par chave-valor correspondente a 'nome' e retorna seu valor; info['nome_completo'] adiciona uma nova chave com o valor retornado.
info = {'codigo':1, 'nome':"Carlos Silva"}
valor=info.pop('nome')
print(valor)
# Saída: Carlos Silva
6.1 Remoção em loop de pares chave-valor
lista_usuarios = [{'id':1, 'nome':"Carlos"},{'id':2, 'nome':"Maria"}]
for indice,usuario in enumerate(lista_usuarios):
for chave in list(usuario.keys()):
if chave=='id':
usuario.pop('id')
print(lista_usuarios)
# Saída: [{'nome': 'Carlos'}, {'nome': 'Maria'}]
- Exercício prático com dicionários
for tentativa in range(3):
login = input('Usuário:').strip()
senha =input('Senha:').strip()
confirmar_senha =input('Confirme a senha:').strip()
if login == '' or senha == '':
print('Usuário e senha não podem estar vazios')
elif login in usuarios:
print('Usuário já existe!')
elif senha != confirmar_senha:
print('As senhas não coincidem')
else:
print('Cadastro realizado com sucesso!')
usuarios.setdefault(login,senha)
break
else:
print('Número máximo de tentativas atingido')
print(usuarios)