Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] Introdução: Dicionários

Avalie este Post de Blog

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 :
Código :
>>> {'Nome':'Magnun', 'Bebida':'Cha Verde', 'Linguagem':'Python'}
{'Bebida': 'Cha Verde', 'Linguagem': 'Python', 'Nome': 'Magnun'}
>>>
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.



Exemplos de índices e valores válidos

Como eu disse anteriormente você não necessariamente tem que usar strings como índices do dicionário:
Código :
>>> {1:'Ubuntu', 2:'Debian', 3:'Fedora'}
{1: 'Ubuntu', 2: 'Debian', 3: 'Fedora'}
>>>
É importante lembrar também que os valores podem variar de tipos como no exemplo abaixo:
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'}
>>>
Como vocês podem ver, utilizei valores do tipo string, tupla, número inteiro e número com ponto flutuante.



Índices não recomendados

Além disso, é possível utilizar índices heterogêneos, como no caso abaixo:
Código :
>>> {'teste':'ok', 1:'ok tambem', (1,2):'ainda ok'}
{(1, 2): 'ainda ok', 1: 'ok tambem', 'teste': 'ok'}
>>>
Atenção: Utilizar indices como no caso a cima pode gerar grandes problemas na hora de programar. É importante manter um padrão!



Í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:
Código :
>>> {[1,2]:'teste', 'resposta':42}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>
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 :
>>> {'teste1':1, 'teste2':2, 'teste1':3}
{'teste1': 3, 'teste2': 2}
>>>
Um pequeno banco de dados

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:

Có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'}}
>>>
Outras formas de se iniciar um dicionário

Existe outra forma de se iniciar um dicionário:
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}
>>>
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.


É 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

  1. Avatar de ilsahec
    Essas aulas tem sido muito boas. Valeu
  2. Avatar de JPEROLA
    Concordo, muito boa. Parabéns Magnun.
  3. Avatar de Magnun
    Obrigado pessoal.

    Nos próximos posts vai começar a ficar mais interessante!
  4. Avatar de MarcusMaciel
    até eu sai no artigo
  5. Avatar de Magnun
    Pequena homenagem à equipe da Under. Adianto que foram escolhidos aleatóriamente na minha lista de contatos.
  6. Avatar de juniorphy
    Excelentes aulas ... Valeu Magnun
  7. Avatar de PEdroArthurJEdi
    Opá Magnum, beleza?

    Acho que vale lembrar de evitar misturar tipos nas chaves dos dicionários.

    Por exemplo:

    Código :
    >>> d = {}
    >>> d[1] = 'algo'
    >>> d['1'] = 'outro algo'
    Vai gerar um dicinário com duas chaves, a inteira 1 e a string '1':

    Código :
    >>> d
    {'1': 'outro algo', 1: 'algo'}
    O que pode levar a uma baita dor de cabeça quando se trabalho num código mais complexo.

    Abraço!
  8. Avatar de Magnun
    Cara, na verdade eu falei, mas telavez não tenha ficado muito claro... Na parte "Índices não recomendados" eu dei um exemplo de misturar vários índices.

    Mas valeu pelo toque. Vou frisar isso nas próximas vezes que eu abordar dicionários!
  9. Avatar de PEdroArthurJEdi
    Pois é, prestei atenção agora...
  10. Avatar de fabiocs
    obrigado... show de bola
  11. Avatar de fabraga
    Ainda desenha Manga? :)

+ Enviar Comentário



Visite: BR-Linux ·  VivaOLinux ·  Dicas-L