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

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

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

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 9 Listas e tuplos

Programação I Aula 9 Listas e tuplos

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

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

Introdução à Programação

Programação I Aula 8 Cadeias de carateres

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

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

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

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

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

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

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

MCG126 Programação de Computadores II

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

Nas aulas anteriores Strings. Ciclos

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

Listas, conjuntos e dicionários

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

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

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

Programação I Aula 3 Primeiros programas

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

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

Programação Funcional 9 a Aula Programas interativos

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

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

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

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

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

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

Abaixo iremos pormenorizar cada um de seus atributos:

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

Python - Variáveis e expressões

Fundamentos da Programação

Ficheiros. Capítulo 8

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

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

Fundamentos da Programação

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

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

Estruturas de Dados em Python

MC-102 Aula 11 Strings

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

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

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

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

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

Fundamentos da Programação

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

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

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

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

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

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

Geografia. Professor: Diego Alves de Oliveira

Programação I Aula 6 Números pseudo-aleatórios Pedro Vasconcelos DCC/FCUP

Linguagem de Programação C

Introdução à Programação. Strings

Estrutura de Dados. Diego Silveira Costa Nascimento

14 - Dados Estruturados

Controle de Fluxo Comandos de decisão multipla

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

Fundamentos da Programação

Processamento da Informação Teoria Funções

Estruturas de dados para listas arrays e listas ligadas

Programação de Computadores

Programação I Aula 10 Processamento de listas

Processamento da Informação Teoria. Strings

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas

Introdução à Programação

Computação 1. Aula 11 Teórica professor: Leonardo Carvalho

Programação I Aula 10 Processamento de listas

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

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

Processamento da Informação Teoria. Coleções: Listas

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

MAC2166 Introdução à Computação

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

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

Pesquisa: operação elementar

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

Módulo: PYTHON. Felipe Oliveira

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

A Linguagem Python: Uma visão geral. Prof. Alberto Costa Neto Programação em Python

Programação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Os elementos da programação

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

Introdução a Programação

Ficheiros de Valores Separados por Vírgulas (CSV)

Programação II. Aula 3

Algoritmos e estrutura de dados

Transcrição:

Programação I Aula 14 Dicionários DCC/FCUP DCC/FCUP 2019 1/ 29 Nesta aula 1 Dicionários 2 Contar ocorrências de letras DCC/FCUP 2019 2/ 29

Dicionário Estrutura de dados para uma tabela de associações: cada chave é associada a um (e um só) valor Analogia: dicionário bilingue (e.g. português-inglês) Podemos como chaves apenas tipos imutáveis: números cadeias de caracteres tuplos combinações dos anteriores DCC/FCUP 2019 4/ 29 Exemplo: um inventário Um inventário que associa quantidades disponíveis a frutas. Item Quantidade bananas 25 peras 12 laranjas 10 DCC/FCUP 2019 5/ 29

Exemplo: um inventário (cont.) Poderiamos representar como uma lista de pares: [ ( bananas,25), ( laranjas,10), ( peras,12) ] Desvantagens: necessário percorrer a lista para procurar o valor associado a uma chave permite repetir chaves; por exemplo [( bananas,1), ( bananas,25), ( laranjas,10), ( peras,12),] representa quantas bananas (1, 25 ou 26)? DCC/FCUP 2019 6/ 29 Usando um dicionário >>> inv = { bananas :25, laranjas :10, peras :12} Pedir o valor associado a uma chave: >>> inv[ bananas ] 25 Modificar: >>> inv[ bananas ] = inv[ bananas ] + 1 >>> inv { laranjas :10, peras :12, bananas :26} DCC/FCUP 2019 7/ 29

Usando um dicionário (cont.) Outros exemplos: >>> emails = { Pedro : pbv@dcc.fc.up.pt, João : jpp@dcc.fc.up.pt } >>> dirs = { (0,1): N, (0,-1): S, (-1,0): W, (1,0): E } >>> vazio = {} # um dicionário vazio DCC/FCUP 2019 8/ 29 Algumas operações sobre dicionários Obter o valor associado à chave: dict[chave] (erro se a chave não existir) Atribuir um valor a uma chave: dict[chave] = valor Testar se existe uma chave: chave in dict (resultado: True ou False) DCC/FCUP 2019 9/ 29

Exemplos >>> inv = { bananas :25, laranjas :10, peras :12} >>> inv[ bananas ] 25 >>> inv[ kiwis ] KeyError: kiwis >>> bananas in inv True >>> kiwis in inv False DCC/FCUP 2019 10/ 29 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 DCC/FCUP 2019 11/ 29

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 são listadas por ordem! DCC/FCUP 2019 12/ 29 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. DCC/FCUP 2019 13/ 29

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 DCC/FCUP 2019 14/ 29 Anotações de tipos Dict[T 1,T 2] tipo dos dicionários cujas chaves são de tipo T 1 e os valores são de tipo T 2 Necessitamos da seguinte linha no ínício do ficheiro: from typing import * DCC/FCUP 2019 15/ 29

Anotações de tipos (cont.) Exemplos: >>> inv = { bananas :25, laranjas :10, peras :12} >>> emails = { Pedro : pbv@dcc.fc.up.pt, João : jpp@dcc.fc.up.pt } >>> dirs = { (0,1): N, (0,-1): S, (-1,0): W, (1,0): E } inv tem tipo Dict[str,int] emails tem tipo Dict[str,str] dirs tem tipo Dict[Tuple[int,int],str] DCC/FCUP 2019 16/ 29 Contar ocorrências de letras Problema: contar o número de ocorrências de cada letra num ficheiro de texto. (Uma tabela deste género chama-se um histograma.) Vamos usar um dicionário para associar cada letra ao seu número de ocorrências. DCC/FCUP 2019 18/ 29

Um texto de exemplo Usamos o Canto I d Os Lusíadas 1 como texto de exemplo. 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. DCC/FCUP 2019 19/ 29 Histograma de ocorrências from typing import * def histograma(fich: str) -> Dict[str,int]: Construir o dicionário de ocorrências das letras de um ficheiro. f = open(fich, "r", encoding="utf-8") hist: Dict[str,int] = {} # inicializar while True: # ler o texto linha-à-linha linha = f.readline().lower() if linha == "": break for c in linha: # para cada carater if c>= a and c<= z : hist[c] = 1+hist.get(c,0) f.close() return hist DCC/FCUP 2019 20/ 29

Contar ocorrências de letras Canto I de Os Lusíadas >>> histograma("lusiadas_cantoi.txt") { 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} DCC/FCUP 2019 21/ 29 Imprimir a tabela de contagems hist = histograma("lusiadas_cantoi.txt") for letra,cont in hist.items(): print(letra, cont) # letra, contagem Podemos importar para uma folha de cálculo e visualizar gráficamente. DCC/FCUP 2019 22/ 29

Gráfico do histograma DCC/FCUP 2019 23/ 29 Observações A letra e é a que ocorre mais vezes (3064) seguida o a (3015) A letra y ocorre apenas 1 vez Contudo: os resultados não são exatos porque não contabilizamos letras acentuadas! Para corrigir esses casos, vamos converter letras acentuadas em não acentuadas DCC/FCUP 2019 24/ 29

Digressão: normalização do texto Em Unicode, uma letra acentuada pode ser representada de duas formas distintas: NFC um só código numérico; 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). DCC/FCUP 2019 25/ 29 Digressão: normalização do texto (cont.) A função normalize do módulo unicodedata 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 +. DCC/FCUP 2019 26/ 29

Histograma de ocorrências (2) from typing import * from unicodedata import normalize def histograma(fich: str) -> Dict[str,int]:... f = open(fich, "r", encoding="utf-8") hist = {} while True: linha = f.readline().lower() if linha == "": break for c in normalize( NFD,linha): if c>= a and c<= z : hist[c] = 1+hist.get(c,0) f.close() return hist DCC/FCUP 2019 27/ 29 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} Correção das contagens de a, c, e, i e o A letra mais frequente é o a e não o e! DCC/FCUP 2019 28/ 29

Sumário Dicionários permite representar tabelas de associações A ordem entre as entradas não é significativa Procurar por uma chave é mais fácil e eficiente do que numa lista DCC/FCUP 2019 29/ 29