[Curso de Python] Introdução: Dicionários
por
em 06-10-2009 às 09:46 (12668 Visualizações)
Antes de prosseguir leia os artigos anteriores aqui
Acho que um dos tipos de dados mais bem bolados em Python é o dicionário. Ele permite que sejam feitas diversas coisas com eles. Eu particularmente utilizo ele como um catálogo de informações ou como um "banco de dados" simplificado.
Dicionários
Dicionários são uma coleção de entradas identificados por uma chave e um valor. A chave, ou índice, pode ser qualquer tipo imutável em python enquanto o valor pode ser absolutamente qualquer coisa em Python.
Sintaxe
A sintaxe do dicionário utiliza o símbolo chaves como delimitador de início e fim, o dois pontos ( : ) separa o índice do valor e a vírgula separa os pares índice:valor :
Nesse exemplo eu criei um catálogo de informações sobre minha pessoa. Esse catálogo é constituído pelas chaves "Nome", "Bebida" e "Linguagem" e pelos valores "Magnun", "Cha verde" e "Python", respectivamente. Note que a ordem dos índices foi alterada de forma e estar em ordem alfabética.Código :>>> {'Nome':'Magnun', 'Bebida':'Cha Verde', 'Linguagem':'Python'} {'Bebida': 'Cha Verde', 'Linguagem': 'Python', 'Nome': 'Magnun'} >>>
Exemplos de índices e valores válidos
Como eu disse anteriormente você não necessariamente tem que usar strings como índices do dicionário:
É importante lembrar também que os valores podem variar de tipos como no exemplo abaixo:Código :>>> {1:'Ubuntu', 2:'Debian', 3:'Fedora'} {1: 'Ubuntu', 2: 'Debian', 3: 'Fedora'} >>>
Como vocês podem ver, utilizei valores do tipo string, tupla, número inteiro e número com ponto flutuante.Código :>>> {'Nome': 'Magnun', 'Hobbie': ('Tocar Contra-baixo', 'Programar em Python', 'Desenhar Manga'), 'Idade': 24, 'Altura': 1.80} {'Idade': 24, 'Hobbie': ('Tocar Contra-baixo', 'Programar em Python', 'Desenhar Manga'), 'Altura': 1.8, 'Nome': 'Magnun'} >>>
Índices não recomendados
Além disso, é possível utilizar índices heterogêneos, como no caso abaixo:
Atenção: Utilizar indices como no caso a cima pode gerar grandes problemas na hora de programar. É importante manter um padrão!Código :>>> {'teste':'ok', 1:'ok tambem', (1,2):'ainda ok'} {(1, 2): 'ainda ok', 1: 'ok tambem', 'teste': 'ok'} >>>
Índices não aceitos
Como eu mencionei, só é possível utilizar tipos imutáveis nos índices, logo não é possível utilizar listas e dicionários:
Outro detalhe é que os índices devem ser unicos, caso seja utilizado o mesmo índice mais de uma vez na inicialização de um dicionário, a última atribuição irá prevalecer:Código :>>> {[1,2]:'teste', 'resposta':42} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list' >>>
Um pequeno banco de dadosCódigo :>>> {'teste1':1, 'teste2':2, 'teste1':3} {'teste1': 3, 'teste2': 2} >>>
Como eu disse, é possível utilizar os dicionários para organizar um banco de dados simplificado. Para isso vou utilizar um dicionário que tem como índices números inteiros - eles representarão a chave primária da tabela - e como valores teremos dicionários que indexarão informações sobre a entrada. Para uma maior legibilidade do código, vou separar cada entrada em uma nova linha:
Outras formas de se iniciar um dicionárioCódigo :>>> { ... 0:{'Nome':'Marcus Marciel', ... 'Tags':['Administrador', 'Especialista'], ... 'Data de Registro':'07/12/2000', ... 'Total de Mensagens':1370, ... 'Envios no Blog':44}, ... 1:{'Nome':'Magnun', ... 'Tags':['Moderador', 'Daemon'], ... 'Data de Registro':'12/02/2006', ... 'Total de Mensagens':4676, ... 'Envios no Blog':16}, ... 2:{'Nome':'Alexandre Correa', ... 'Tags':['Editor', 'Moderador', 'Consultor'], ... 'Data de Registro':'13/11/2006', ... 'Total de Mensagens':945, ... 'Envios no Blog':113}, ... } # Fim do dicionário {0: {'Data de Registro': '07/12/2000', 'Envios no Blog': 44, 'Tags': ['Administr ador', 'Especialista'], 'Total de Mensagens': 1370, 'Nome': 'Marcus Marciel'}, 1 : {'Data de Registro': '12/02/2006', 'Envios no Blog': 16, 'Tags': ['Moderador', 'Daemon'], 'Total de Mensagens': 4676, 'Nome': 'Magnun'}, 2: {'Data de Registro ': '13/11/2006', 'Envios no Blog': 113, 'Tags': ['Editor', 'Moderador', 'Consult or'], 'Total de Mensagens': 945, 'Nome': 'Alexandre Correa'}} >>>
Existe outra forma de se iniciar um dicionário:
Eu, pessoalmente, acho a forma tradicional (usando chaves) bem clara e concisa mas não posso negar que a forma de inicialização utilizando argumentos (última linha do exemplo acima) tem suas aplicações. Mas todas as outras demonstradas acima, eu considero muito confusa e desnecessárias.Código :>>> dict((('teste1',1), ('teste2',2))) # Tupla de tuplas {'teste1': 1, 'teste2': 2} >>> dict([('teste1',1), ('teste2',2)]) # Lista de tuplas {'teste1': 1, 'teste2': 2} >>> dict([['teste1',1], ['teste2',2]]) # Lista de listas {'teste1': 1, 'teste2': 2} >>> dict(teste=1, teste2=2) # Argumentos {'teste': 1, 'teste2': 2} >>>
É isso ai pessoal. No próximo post vamos começar a falar da função de slicing (fatiamento). Espero posta em breve.
Até mais...
Comentários
+ Enviar Comentário