Aprenda Python

  • Página Inicial
  • Contato!
  • Tudo sobre Python Parte 1!
  • Tudo sobre Python Parte 2!
  • Tudo sobre Python Parte 3!
  • Tudo sobre Python Parte 4!
  • Tudo sobre Python Parte 5!
  • Tudo sobre Python Parte 6!
  • Tudo sobre Python Parte 7!
  • Tudo sobre Python Parte 6

    Dicionários

    Como lembramos, temos listas compostas (que contém vários valores), como as tuplas e a listas, que são exibidos pelo número do índice, por exemplo:

    
    dados = list()
    
    dados.append("Sérgio")
    dados.append(25)
    
    print(dados[0])
    print(dados[1])
    
    

    Mas os dicionários, apesar de semelhantes, permitem o uso de nomes literais para os índices, por exemplo, o código acima, poderia ter os índices nome e idade. Os dicionários são declarados usando chaves, assim:

    
    dados = {"nome": "Sérgio", "idade": 25}
    
    print(dados["nome"])
    print(dados["idade"])
    
    

    Ou assim:

    
    dados = dict()
    # Também pode ser assim: dados = {}
    
    dados["nome"] = "Sérgio"
    dados["idade"] = 25
    
    print(dados["nome"])
    print(dados["idade"])
    
    

    PS: Os dicionários não aceitam append, para criar um novo índice, fazemos a adição de forma literal, com o novo índice e valor, assim:

    
    dados["sexo"] = "M"
    
    

    Para excluir podemos usar normalmente o del, assim:

    
    del dados["idade"]
    
    

    Podemos fazer também assim:

    
    filme = {"titulo": "Star Wars",
             "ano": 1977,
             "diretor": "George Lucas"}
    
    print(filme.values())
    print(filme.keys())
    print(filme.items())
    
    

    Como visto acima, o values() é usado para pegar os valores armazenados no dicionário, o key para pegar os índices e o items para pegar tudo.

    E da mesma forma, podemos usar num for assim:

    
    filme = {"titulo": "Star Wars",
             "ano": 1977,
             "diretor": "George Lucas"}
    
    for k, v in filme.items():
        print(f"O {k} é {v}.")
    
    

    Também podemos juntar listas, tuplas e dicionários, por exemplo:

    
    locadora = [{"titulo": "Star Wars", "ano": 1977, "diretor": "George Lucas"},
                {"titulo": "Avengers", "ano": 2012, "diretor": "Joss Whedon"},
                {"titulo": "Matrix", "ano": 1999, "diretor": "Wachowski"}]
    
    print(locadora[0]["ano"])
    print(locadora[2]["titulo"])
    
    

    Basicamente, os dicionários mostramos assim:

    
    pessoas = {"nome": "Gustavo", "sexo": "M", "idade": 22}
    
    print(pessoas)
    
    

    Podemos também mostrar o índice, com nomes literais:

    
    pessoas = {"nome": "Gustavo", "sexo": "M", "idade": 22}
    
    # Isso dá erro: print(pessoas[0])
    print(pessoas["nome"])
    
    

    Veja um exemplo de melhor exibição:

    
    pessoas = {"nome": "Gustavo", "sexo": "M", "idade": 22}
    
    print(f"O {pessoas['nome']} tem {pessoas['idade']} anos.")
    
    

    Outro exemplo:

    
    pessoas = {"nome": "Gustavo", "sexo": "M", "idade": 22}
    
    print(pessoas.keys())
    print(pessoas.values())
    print(pessoas.items())
    
    

    Com for:

    
    pessoas = {"nome": "Gustavo", "sexo": "M", "idade": 22}
    
    for k in pessoas.values():
        print(k)
    
    

    Com for e enumerate:

    
    pessoas = {"nome": "Gustavo", "sexo": "M", "idade": 22}
    
    for k, v in pessoas.items():
        print(f"{k} = {v}.")
    
    

    Podemos também alterar os valores do dicionário:

    
    pessoas = {"nome": "Gustavo", "sexo": "M", "idade": 22}
    
    pessoas["nome"] = "Sérgio"
    
    for k, v in pessoas.items():
        print(f"{k} = {v}.")
    
    

    Como adicionar e remover índices:

    
    pessoas = {"nome": "Gustavo", "sexo": "M", "idade": 22}
    
    pessoas["peso"] = 98.5
    del pessoas["sexo"]
    
    for k, v in pessoas.items():
        print(f"{k} = {v}.")
    
    

    Com dicionários dentro de uma lista:

    
    brasil = list()
    
    estado1 = {"UF": "Rio de Janeiro", "Sigla": "RJ"}
    estado2 = {"UF": "São Paulo", "Sigla": "SP"}
    
    brasil.append(estado1)
    brasil.append(estado2)
    
    print(brasil)
    
    

    Podemos exibir dessas formas:

    
    brasil = list()
    
    estado1 = {"UF": "Rio de Janeiro", "Sigla": "RJ"}
    estado2 = {"UF": "São Paulo", "Sigla": "SP"}
    
    brasil.append(estado1)
    brasil.append(estado2)
    
    print(brasil[0])
    print(brasil[0]["UF"])
    
    

    Só que tem um problema, se adicionarmos os dicionários com um append na lista, ele vai dar um problema, que é aquele de copiar os dados:

    
    estado = dict()
    brasil = list()
    
    for c in range(0, 3):
        estado["UF"] = str(input("Unidade Federativa: "))
        estado["Sigla"] = str(input("Sigla do Estado: "))
        brasil.append(estado)
    
    print(brasil)
    
    

    No caso acima, não dá certo usando o fatiamento no dicionário ([:]), então colocamos o método copy() do dicionário, assim:

    
    estado = dict()
    brasil = list()
    
    for c in range(0, 3):
        estado["UF"] = str(input("Unidade Federativa: "))
        estado["Sigla"] = str(input("Sigla do Estado: "))
        brasil.append(estado.copy())
    
    print(brasil)
    
    

    Melhorando a exibição:

    
    estado = dict()
    brasil = list()
    
    for c in range(0, 3):
        estado["UF"] = str(input("Unidade Federativa: "))
        estado["Sigla"] = str(input("Sigla do Estado: "))
        brasil.append(estado.copy())
    
    for e in brasil:
        print(e)
    
    

    Com for aninhado:

    
    estado = dict()
    brasil = list()
    
    for c in range(0, 3):
        estado["UF"] = str(input("Unidade Federativa: "))
        estado["Sigla"] = str(input("Sigla do Estado: "))
        brasil.append(estado.copy())
    
    for e in brasil:
        for k, v in e.items():
            print(f"O campo {k} tem valor {v}.")
    
    

    A exibição também pode ser feita assim:

    
    for e in brasil:
        for v in e.values():
            print(v, end=" ")
    
    

    PS: Os dicionários não devem ser confundido com os sets.

    Um objeto do tipo set habilita operações matemáticas de conjuntos, tais como: União, intersecção, diferença, etc. Esse tipo de estrutura pode ser usado em testes de associação e remoção de valores duplicados de uma sequência.

    Em Python, uma das maneiras de se criar um objeto do tipo set é colocando os valores entre chaves, conforme código a seguir:

    
    vogais = {"A", "E", "I", "O", "U"}
    
    

    Lembrando que o set não considera valores repetidos.

    Funções - Parte 1

    Basicamente, as funções na linguagem de programação são chamadas de rotinas (assim como temos a nossa rotina, de sair, dormir, ir pra escola, etc.).

    Até agora, usamos funções internas do Python nos programas, como o print(), o len(), o int() e vários outros.

    Podemos criar uma função como a de mostrar uma linha, por exemplo, igual a usada em vários programas até agora.

    Veja um exemplo disso:

    
    def mostraLinha():
        print("-=" * 30)
    
    mostraLinha()
    print("SISTEMA DE ALUNOS")
    mostraLinha()
    
    

    Observe que para definir uma rotina, usamos a palavra def antes dela, e no final ela tem parênteses, e não podemos esquecer da tabulação.

    Essa rotina permite nós exibirmos essa linha em partes especificadas no nosso programa. Sempre que ela for chamada, será executada, o def não é executado automaticamente.

    Isso permite nos facilitar muito, ao não repetirmos códigos iguais, por exemplo:

    
    def mostraLinha():
        print("-=" * 30)
    
    mostraLinha()
    print("SISTEMA DE ALUNOS")
    mostraLinha()
    print("CURSO EM VÍDEO")
    mostraLinha()
    print("APRENDA PYTHON")
    mostraLinha()
    
    

    Podemos também passar parâmetros dentro dos parêntese da def, por exemplo:

    
    def mostraLinha(msg):
        print("-=" * 30)
        print(msg)
        print("-=" * 30)
    
    mostraLinha("SISTEMA DE ALUNOS")
    mostraLinha("CURSO EM VÍDEO")
    mostraLinha("APRENDA PYTHON")
    
    

    Isso deixou o programa menor ainda.

    As funções são úteis para não escrevermos código longos várias vezes.

    Usualmente, faríamos assim para fazer um programa:

    
    a = 4
    b = 5
    s = a + b
    print(s)
    
    a = 8
    b = 9
    s = a + b
    print(s)
    
    a = 2
    b = 1
    s = a + b
    print(s)
    
    

    Facilitando o código com uma função com parâmetros:

    
    def soma(a, b):
        s = a + b
        print(s)
    
    soma(4, 5)
    soma(8, 9)
    soma(2, 1)
    
    

    Podemos também especificar as posições, mesmo em ordem diferente, dessa forma:

    
    def soma(a, b):
        s = a + b
        print(f"A = {a}, B = {b}")
        print(f"A + B = {s}")
    
    soma(b = 4, a = 1)
    
    

    PS: Lembrando que se definirmos dois parâmetros, devemos passar sempre dois, se definirmos um passaremos sempre um, se não definirmos nenhum não passamos nada, etc.

    Podemos também desempacotar parâmetros, usando o asterisco, que indica que pode passar quantidades variaveis de parâmetros, assim:

    
    def contador(* num):
        tam = len(num)
        print(f"Recebi os valores {num} e são ao todo {tam} números!")
    
    contador(2, 1, 7)
    contador(8, 0)
    contador(4, 5, 7, 6, 2)
    
    

    Pode ver que ele colocou os valores numa tupla (que não é alterável).

    Podemos também trabalhar diretamente com listas, passando ela por um parâmetro, por exemplo:

    
    def dobra(lst):
        pos = 0
    
        while pos < len(lst):
            lst[pos] *= 2
            pos += 1
    
    valores = [7, 2, 5, 0, 4]
    
    dobra(valores)
    print(valores)
    
    

    Dessa forma, estaremos alterando diretamente a lista, sem usar o desempacotamento.