25 de maio de 2009

Criando dicionários com uma sintaxe mais prática

Em python, um dicionário é o mesmo que um array associativo em PHP. Ou seja, uma lista indexada por chaves (keys) que podem ser strings e apontam para valores.

Para criar um dicionário, a sintaxe é:
d = {'fruta': 'goiaba', 'dia': 'sabado', 'nome': 'maria'}

Um jeito diferente de criar o mesmo dicionário é usando o construtor dict(), assim:
d = dict([('fruta', 'goiaba'), ('dia', 'sabado'), ('nome', 'maria')])

Esse jeito junta tudo, faz uma salada. rsrs
Explicando: O dict() recebe como parâmetro uma lista (que é tudo entre os colchetes) contendo tuplas com pares de chave e valor (o que está dentro dentro de cada um dos 3 parênteses internos). Assim fica confuso, né?
Obs.: se você ainda não sabe o que é uma lista ou uma tupla, sugiro ler urgentemente o post Por Onde Começar? aqui nesse blog.

Como todo bom programador, é bom saber uma forma mais prática e intuitiva de fazer as coisas. Então vamos à ela.

O jeito mais simples é usando o recurso de keyword argument. Veja como fica mais fácil de entender:
d = dict(fruta='goiaba', dia='sabado', nome='maria')

Bem melhor, né? :-)

Desse jeito, as chaves são passadas como argumentos nomeados para o constructor dict(), que faz o tratamento adequado e constrói nosso dicionário.

Note que dessa forma só podemos criar chaves que não sejam iniciadas com números, uma vez que os nomes de argumentos devem seguir a sintaxe do python.

Portanto, tentar criar um dicionário com uma das chaves abaixo é inválido:
d = dict(1='goiaba', 2='sabado', 3='maria')
d = dict('1'='goiaba', '2'='sabado', '3'='maria')
d = dict(1a='goiaba', 2b='sabado', 3c='maria')
d = dict('1a'='goiaba', '2b'='sabado', '3c'='maria')

Aí a gente volta e usa a sintaxe convencional, de uma das duas formas abaixo:
d = {1: 'goiaba', 2: 'sabado', 3: 'maria'}
d = {'1a': 'goiaba', '2b': 'sabado', '3c': 'maria'}

No entanto, vale atentar para uma "pegadinha" desse método usando o dict(). Vamos a ela.

Suponha que você tenha uma variável chave = 'nome'.

Se você criar o dicionário assim:
d = dict(fruta='goiaba', dia='sabado', chave='maria')
você não terá uma chave 'nome', como seria de se esperar. Faça o teste no shell do python e veja o resultado.

Para ter a chave 'nome', crie seu dicionário assim:
d = {'fruta':'goiaba', 'dia':'sabado', chave:'maria'}

Fica aí a dica para nós, iniciantes.

Eu sou Vinicius Assef, um programador do século passado que gosta de Python, pratica Lean Development e acredita em Deus. Você pode me contactar por email ou twitter.

5 comentários:

  1. Olá! Eu, pessoalmente, acho melhor usar a sintaxe de chaves (curly brackets) com indentação:

    d = {
        'fruta':'goiaba',
        'dia':'sabado',
        'nome':'maria'
    }

    Acho que assim fica fácil de ver qual chave (key) vai com qual valor e dá pra usar qualquer tipo de chave (key).

    ResponderExcluir
  2. Olá Kao.

    Realmente a identação muda tudo, né?

    A intenção foi mostrar formas alternativas de criar um dicionário.

    Essa forma "mais prática" que coloquei é porque quase sempre as chaves dos dicionários serão alfanuméricas mesmo e eu acho bem chato ficar digitando essas aspas antes e depois dos nomes das chaves.

    Mas tem coisa que é de gosto pessoal mesmo.

    Obrigado pela contribuição.

    ResponderExcluir
  3. Bom dia, eu já programo em PHP, estou começando o estudo do Python, por eu já programar em PHP vocês acham que vou ter facilidade ou dificuldade para aprender Python?

    ResponderExcluir
  4. Já ia me esquecendo, meu principal objetivo em aprender Python, é usá-lo no desenvolvimento de aplicativos para web.

    ResponderExcluir
  5. Rapaz, vc está na mesma situação que eu.

    Dá uma lida nesse post que escrevi no meu blog pessoal, que fala sobre desenvolvimento em geral: http://viniciusban.blogspot.com/2009/05/linguagem-ou-framework.html

    Se você quer desenvolver para web, dá uma olhada no Django.

    Tenho um post aqui no meu blog com o título Aprendendo Django no Planeta Terra.

    Mas não se esqueça: aprenda Python antes do Django. Conselho de quem apanhou com isso. ;-)

    Python é mais fácil e mais clara do que o PHP. Mas tem aquele tempo inicial de vc pegar o jeito da linguagem.

    Dá uma olhada nesse blog aqui que vc vai encontrar alguma coisa p/ te ajudar. Ele é planejado justamente para quem está começando com Python. ;-)

    --
    Atte.,
    Vinicius Assef.

    ResponderExcluir

Marcadores