Introdução à Programação Aula 14 Dicionários

Documentos relacionados
Programação I Aula 14 Dicionários

Programação I Aula 14 Dicionários Pedro Vasconcelos DCC/FCUP

Programação I Aula 8 Cadeias de carateres

Computação 1 - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 18

Introdução à Programação Aula 13 Manipulação de ficheiros

Programação I Aula 13 Manipulação de ficheiros

Introdução à Programação Aula 9 Listas e tuplos

Programação I Aula 9 Listas e tuplos

Introdução à Programação / Programação I

Introdução à Programação / Programação I

Introdução à Programação

Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas

MCG126 Programação de Computadores II

Aula de hoje. Outras estruturas de dados. Teoria dos conjuntos. Teoria dos conjuntos. Conjuntos em Python. Conjuntos em Python

Linguagem Python. Processamento Estatístico da Linguagem Natural. Barra invertida em strings. Strings. Aspas triplas. Operações com Strings

Introdução à Programação Aula 3 Primeiros programas

Aplicações de Dicionários. Prof. Alberto Costa Neto Programação em Python

FUNDAMENTOS DA PROGRAMAÇÃO 2º Teste, 1 de junho de 2013, 1h30m

Nas aulas anteriores Strings. Ciclos

Programação I Aula 3 Primeiros programas

Introdução à Programação Aula 5 Ciclos e condicionais

Programação I Aula 11 Mais sobre ciclos e iteração

Aula passada. Aula passada... Sequências Funções puras e modificadores. Listas Tuplos

Listas, conjuntos e dicionários

Dicionários. Operações Aliases, cópias. Os tipos de dados compostos que estudamos até ao momento (strings, listas, tuplos) são sequenciais:

Resolução do exame de Computadores e Programação da licenciatura em Engenharia Biomédica

Introdução à Programação / Programação I

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

Programação I Aula 19 Aritmética com racionais Pedro Vasconcelos DCC/FCUP

Fundamentos da Programação

Abaixo iremos pormenorizar cada um de seus atributos:

Programação I Aula 12 Mais sobre cadeias e listas

Informática para Ciências e Engenharias - 2º semestre 2018/2019

Ficheiros. Capítulo 8

Estruturas de Dados em Python

Programação Funcional 9 a Aula Programas interativos

Linguagem Python. Inteligência Artificial. Características de Python. Importando módulos. Módulos. Usando Python no modo interativo

Processamento da Informação Teoria Funções

Processamento da Informação Teoria. Exercícios sobre strings

Linguagem de Programação C

Introdução à Programação Aula 19 Programação com objetos

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

Introdução à Programação Aula 17 Deteção e correção de erros

Informática para Ciências e Engenharias 2013/14. Teórica 7

Estrutura de Dados. Diego Silveira Costa Nascimento

Programação I Aula 16 Mais exemplos de recursão

Introdução à Programação. Strings

Introdução ao Python. Prof. Fabrício Olivetti de França Universidade Federal do ABC

I - Navegação marítima. II - Áreas de ocorrência da floresta tropical e da taiga. III - Regiões agricultáveis e desérticas.

Fundamentos da Programação

14 - Dados Estruturados

Nas aulas anteriores. Tipos nativos do Python: Tipos simples: inteiros, floats, booleanos. Tipos compostos: strings, listas, dicionários.

Informática para Ciências e Engenharias 2014/15. Teórica 7

Introdução à Programação Aula 20 Definição de classes

Python. Resumo e Exercícios P2 Parte 1

Teste de Funções por Partição do Espaço de Entrada

Introdução à Programação

Aula 18: Vetores Introdução a Programação Túlio Toffolo & Puca Huachi

Programação de Computadores

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

Python - Variáveis e expressões

Processamento da Informação Teoria. Strings

PHP Básico. Aula 2. Estrutura de controle Vetores e matrizes

Os Lusíadas Luís Vaz de Camões /1580

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli

FUNDAMENTOS DA PROGRAMAÇÃO 1º Teste, 19 de abril de 2013, 1h30m

Fundamentos da Programação

Minicurso de Python Aula 2. Raphael Lupchinski Marcelo Millani

TIPOS ESTRUTURADOS. Prof. Msc. Luis Filipe Alves Pereira 2015

Computação 1 - Python Aula 12 - Teórica: Interação com o usuário e programa principal. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 25

Fundamentos da Programação

Módulo: PYTHON. Felipe Oliveira

Introdução à Programação Aula 11 Mais sobre ciclos e iteração

Programação de Computadores

Introdução a Programação

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

MC-102 Aula 11 Strings

Geografia. Professor: Diego Alves de Oliveira

Programação I Aula 18 Programação com objetos Pedro Vasconcelos DCC/FCUP

PYTHON LISTAS. Introdução à Programação SI1

Introdução à Programação Aula 10 Processamento de listas

Fundamentos de Lógica e Algoritmos. Aula 3.2 IDLE, Variáveis e Tipos. Prof. Dr. Bruno Moreno

Programação I Aula 7 Resolução numérica de equações

Programação I Aula 10 Processamento de listas

Programação I Aula 6 Números pseudo-aleatórios

Controle de Fluxo Comandos de decisão multipla

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

Fabio G. Cozman, Thiago Martins 2017

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

Introdução à Programação Aula 7 Resolução numérica de equações

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

4 a Aula - Funções de Intervalo (II). Ciclo for. Leitura e Escrita em Ficheiros. Mestrado em Engenharia Física Tecnológica

Introdução à Programação / Programação I

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores

Algoritmos e Programação

Informática para Ciências e Engenharias 2014/15. Teórica 9

Ficheiros de Valores Separados por Vírgulas (CSV)

Transcrição:

Introdução à Programação Aula 14 Dicionários Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 1 / 25

Nesta aula 1 Dicionários 2 Contar ocorrências Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 2 / 25

Dicionários Estrutura de dados para tabelas de associações Cada chave é associada a um (e um só) valor Analogia: dicionário bilingue (e.g. português-inglês) Podemos usar como chave: números cadeias de caracteres tuplos combinações dos anteriores (apenas tipos imutáveis) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 3 / 25

Exemplo: um inventário Um inventário que associa quantidades disponíveis a frutas. Item Quantidade bananas 25 peras 12 laranjas 10 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 4 / 25

Exemplo: um inventário (cont.) Poderiamos representar como uma lista de pares: [( bananas,25), ( laranjas,10), ( peras,12) ] Problemas: necessário percorrer a lista para procurar o valor associado a uma chave permite duplicar chaves; por exemplo [( bananas,1), ( bananas,25), ( laranjas,10), ( peras,12),] Representa 1, 25 ou 26 bananas? Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 5 / 25

Criar um dicionário >>> inv = { bananas :25, laranjas :10, peras :12} Podemos consultar valores apartir da chave: >>> inv[ bananas ] 25 >>> inv[ bananas ] = inv[ bananas ] + 1 >>> inv { laranjas :10, peras :12, bananas :26} Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 6 / 25

Criar um dicionário (cont.) Mais alguns exemplos: >>> emails = { Pedro : pbv@dcc.fc.up.pt, João : jpp@dcc.fc.up.pt } >>> dirs = { N :(0,1), S :(0,-1), W :(-1,0), W :(1,0) } >>> vazio = {} # inicializar um dicionário vazio Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 7 / 25

Algumas operações sobre dicionários Obter o valor associado à chave (erro se não existir) dict[chave] Atribuir um valor a uma chave dict[chave] = valor Testar existência de uma chave (resultado: True ou False) chave in dict Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 8 / 25

Exemplos >>> inv = { bananas :25, laranjas :10, peras :12} >>> inv[ bananas ] 25 >>> inv[ kiwis ] KeyError: kiwis >>> bananas in inv True >>> kiwis in inv False Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 9 / 25

Mais operações Obter o valor ou default se a chave não existir: dict.get(chave,default) Exemplos: >>> inv = { bananas :25, laranjas :10, peras :12} >>> inv.get( bananas,0) 25 >>> inv.get( kiwis,0) 0 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 10 / 25

Mais operações (cont.) Percorrer todas as chaves: for chave in dict.keys():... Exemplo: >>> inv = { bananas :25, laranjas :10, peras :12} >>> for fruit in inv.keys():... print(fruit) bananas peras laranjas Nota: as chaves não estão ordenadas! Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 11 / 25

Mais operações (cont.) Obter uma lista com todas as chaves: list(dict.keys()) Exemplo: >>> inv = { bananas :25, laranjas :10, peras :12} >>> list(inv.keys()) [ bananas, peras, laranjas ] Como anteriormente as chaves não estão ordenadas. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 12 / 25

Mais operações (cont.) Percorrer todos os pares de chaves e valores: for chave,valor in dict.items():... Exemplo: >>> inv = { bananas :25, laranjas :10, peras :12} >>> for fruit,quant in inv.items():... print(fruit,quant) bananas 25 peras 12 laranjas 10 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 13 / 25

Contar ocorrências de letras Problema: contar ocorrência cada letra do alfabeto num ficheiro de texto. Vamos usar um dicionário para associar cada letra à sua contagem. Uma tabela deste género chama-se um histograma. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 14 / 25

Um texto de exemplo O canto I d Os Lusíadas 1. 1 lusiadas_cantoi.txt As armas e os barões assinalados, Que da ocidental praia Lusitana, Por mares nunca de antes navegados, Passaram ainda além da Taprobana, Em perigos e guerras esforçados,... 1 Fonte: Instituto Camões http://www.instituto-camoes.pt. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 15 / 25

Histograma de ocorrências def histograma(fich): f = open(fich, "r") # abrir ficheiro para leitura count = {} # inicializa contagem vazia while True: # ler o texto linha-à-linha linha = f.readline().lower() if linha == : break for c in linha: if c>= a and c<= z : count[c] = 1+count.get(c,0) f.close() return count Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 16 / 25

Contar ocorrências de letras Canto I de Os Lusíadas >>> hist = histograma("lusiadas_cantoi.txt") >>> hist { a : 3015, c : 658, b : 249, e : 3064, d : 1217, g : 378, f : 240, i : 1154, h : 239, j : 103, m : 1033, l : 572, o : 2622, n : 1294, q : 390, p : 531, s : 1828, r : 1578, u : 1031, t : 1229, v : 425, y : 1, x : 29, z : 68} Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 17 / 25

Visualização Imprimir uma tabela de ocorrências de letras: hist = histograma("lusiadas_cantoi.txt") # ciclo sobre as chaves for c in hist.keys(): print(c, hist[c]) # letra, contagem Podemos importar para uma folha de cálculo e traçar um gráfico. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 18 / 25

Gráfico do histograma Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 19 / 25

Observações A letra e é a que ocorre mais vezes (3064) A letra y ocorre apenas 1 vez Contudo: os resultados são incorretos porque não contabilizamos letras acentuadas! Para tratar esses casos: vamos converter letras acentuadas em não acentuadas. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 20 / 25

Normalização Em Unicode, uma letra acentuada pode ser representada de duas formas: NFC um código numérico composto; por exemplo, Ç é U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA); NFD um par de códigos da letra e do acento; por exemplo, Ç é U+0043 (LATIN CAPITAL LETTER C) U+0327 (COMBINING CEDILLA). Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 21 / 25

Normalização (cont.) O módulo unicodedata define uma função normalize permite converter entre estas formas. normalize( NFC, str) converte str para a forma composta. normalize( NFD, str) converte str para a forma decomposta. Para ignorar os acentos vamos usar a normalização NFD: ã a + á a + Ç C +. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 22 / 25

Histograma de ocorrências (2) from unicodedata import normalize def histograma(fich): f = open(fich, "r") # abrir ficheiro para leitura count = {} # inicializa contagem vazia while True: # ler o texto linha-à-linha linha = f.readline().lower() if linha == : break for c in normalize( NFD,linha): if c>= a and c<= z : count[c] = 1+count.get(c,0) f.close() return count Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 23 / 25

Contagem revista { a : 3296, c : 739, b : 249, e : 3180, d : 1217, g : 378, f : 240, i : 1210, h : 239, j : 103, m : 1033, l : 572, o : 2707, n : 1294, q : 390, p : 531, s : 1828, r : 1578, u : 1042, t : 1229, v : 425, y : 1, x : 29, z : 68} A letra mais frequente é o a seguido do e. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 24 / 25

Sumário Dicionários permite representar tabelas de associações A ordem entre as entradas não é significativa Pesquisa pela chave é mais eficiente do que sobre uma lista (de pares) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 14 Dicionários 2015 25 / 25