• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
14
0
0

Texto

(1)

Aliases, cópias

Dicionários

Os tipos de dados compostos que estudamos até ao momento (strings,

listas, tuplos) são

sequenciais

:

coleções de dados ordenadas da esquerda para a direita; índice 0 para o primeiro elemento, 1 para o seguindo, . . . acesso aos valores guardados é feito com índices inteiros.

Dicionários

são também coleções de dados, mas:

1 associam umachave a um valor

2 chave (em inglês: key): deve ser de um tipoimutável 3 valor: qualquer objeto do Python

4 não há uma ordem para os valores guardados

(2)

Aliases, cópias

Dicionários: representação

Dicionário vazio: {}

Acesso e atribuição de valores: []

>>> quant = {} >>> quant[’bananas’] = 5 >>> quant[’apples’] = 7 >>> quant[’pears’] = 12 >>> quant[’oranges’] = 4 >>> quant

{’oranges’: 4, ’bananas’: 5, ’pears’: 12, ’apples’: 7} >>> print(quant[’pears’])

12

>>> quant[’bananas’] += 3 >>> quant

{’oranges’: 4, ’bananas’: 8, ’pears’: 12, ’apples’: 7}

Neste padrão:

1 começamos com dicionário vazio 2 adicionamos pares chave-valor

(3)

Aliases, cópias

Dicionários: outra forma de inicialização

>>> quant = {’oranges’: 4, ’bananas’: 5, ’pears’: 12, ’apples’: 7} >>> quant

{’pears’: 12, ’bananas’: 5, ’oranges’: 4, ’apples’: 7}

Alternativa à forma de construção a partir de dicionário vazio;

Pares chave-valor, separados por dois pontos (:).

(4)

Aliases, cópias

Dicionários: exemplo do livro

Dicionário inglês-espanhol:

eng2sp = {} eng2sp[’one’] = ’uno’ eng2sp[’two’] = ’dos’ eng2sp[’three’] = ’tres’ print(eng2sp)

Output:

{’three’: ’tres’, ’two’: ’dos’, ’one’: ’uno’}

A ordem dos pares pode não ser o que esperamos:

resulta de algoritmos desenhados com vista ao acesso rápido aos elementos;

é desse algoritmos (funções de hash) que resulta a ordem por que os elementos aparecem;

(5)

Aliases, cópias

Operações com dicionários

Dicionários são

mutáveis

; podemos operar sobre os seus valores,

modificando-os.

quant = {’oranges’: 4, ’bananas’: 5, ’pears’: 12, ’apples’: 7}

acesso/alteracao do valor:

quant[’bananas’] = 7

remoção um par chave–valor:

>>> del quant[’oranges’] >>> quant

{’pears’: 12, ’bananas’: 7, ’apples’: 7}

tamanho de um dicionário:

>>> len(quant) 3

(6)

Aliases, cópias

Métodos de dicionários

Method Parameters Description

keys none Returns a view of the keys in the dictionary values none Returns a view of the values in the dictionary items none Returns a view of the key-value pairs in the

dicti-onary

get key Returns the value associated with key; None otherwise

get key,alt Returns the value associated with key; alt otherwise

(7)

Aliases, cópias

Percorrer um dicionário

Tal como com listas, podemos iterar através dos elementos de um

dicionário:

quant = {’oranges’: 4, ’bananas’: 5, ’pears’: 12, ’apples’: 7} for key in quant.keys():

print("Value for key ’%s’: %s" % (key, quant[key]))

Output:

Value for key ’pears’: 12 Value for key ’bananas’: 5 Value for key ’oranges’: 4 Value for key ’apples’: 7

A ordem pela qual as chaves do dicionários aparecem não está definida.

É tao frequente iterar sobre as chaves de um dicionário que é permitido

omitir o método .keys():

quant = {’oranges’: 4, ’bananas’: 5, ’pears’: 12, ’apples’: 7} for key in quant:

(8)

Aliases, cópias

Utilização de mais alguns métodos

Exemplo com os métodos mais utilizados:

>>> quant = {’oranges’: 4, ’bananas’: 5, ’pears’: 12, ’apples’: 7} >>> list(quant.keys())

[’pears’, ’bananas’, ’oranges’, ’apples’] >>> list(quant.values())

[12, 5, 4, 7]

>>> list(quant.items())

[(’pears’, 12), (’bananas’, 5), (’oranges’, 4), (’apples’, 7)]

Valores e chaves podem ser convertidos para listas;

O método items devolve uma lista de tuplos, cada um contendo uma

chave e o valor a ela associado.

Outra forma de percorrer um dicionário:

quant = {’oranges’: 4, ’bananas’: 5, ’pears’: 12, ’apples’: 7} for (k,v) in quant.items():

print("Value for key ’%s’: %s" % (k, v))

Output:

Value for key ’pears’: 12 Value for key ’bananas’: 5 Value for key ’oranges’: 4 Value for key ’apples’: 7

(9)

Aliases, cópias

Operadores in, not in

Os operadores in e not in permitem testar se uma chave está (ou

não) num dicionário:

quant = {’oranges’: 4, ’bananas’: 5, ’pears’: 12, ’apples’: 7} if ’bananas’ in quant:

print("yes, we have bananas") else:

print("sorry, no bananas")

Output:

yes, we have bananas

Se tentarmos aceder ao valor de uma chave inexistente no dicionário,

há um erro de execução;

Uma possibilidade é testarmos se a chave existe com in;

Outra possibilidade: método get

>>> quant = {’oranges’: 4, ’bananas’: 5, ’pears’: 12, ’apples’: 7} >>> quant.get(’bananas’)

5

>>> quant.get(’kiwi’) >>> quant.get(’kiwi’,7) 7

(10)

Aliases, cópias

Aliases e cópias de dicionários

Como os dicionários são mutáveis, é necessário precaução com aliases

(tal como com listas);

Quando duas variáveis se referem ao mesmo objeto, alterações numa

delas refletem-se na outra;

Exemplo:

>>> opposites = {’up’: ’down’, ’right’: ’wrong’, ’true’: ’false’} >>> alias = opposites >>> alias is opposites True >>> alias[’right’] = ’left’ >>> opposites[’right’] ’left’

Para fazer cópia: método copy():

>>> opposites = {’up’: ’down’, ’right’: ’wrong’, ’true’: ’false’} >>> acopy = opposites.copy()

>>> acopy[’right’] = ’left’ >>> acopy

{’right’: ’left’, ’true’: ’false’, ’up’: ’down’} >>> opposites

(11)

Aliases, cópias

Matrizes esparsas

Matrizes esparsas são matrizes com poucos elementos não nulos;

Com listas (contém muita redundância):

matrix = [[0, 0, 0, 1, 0], [0, 0, 0, 0, 0], [0, 2, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 3, 0]]

Com dicionários: especifica-se apenas os elementos não nulos:

matrix = {(0, 3): 1, (2, 1): 2, (4, 3): 3}

Para aceder a elementos da matriz:

1 lista de listas: dupla indexação, e.g. matrix[1][3]

2 dicionário: índices são tuplos de inteiros, e.g. matrix[(1,3)] (ou matrix[1,3])

(12)

Aliases, cópias

Matrizes esparsas

Problema: acesso a elementos inexistentes com matrix[i,j] dá erro

1 testar com in antes de aceder a um elemento;

2 melhor: utilizar o método get: matrix.get((i,j), 0) >>> matrix.get((1,3))

>>> matrix = {(0, 3): 1, (2, 1): 2, (4, 3): 3} >>> matrix[(1,3)]

Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: (1, 3)

>>> matrix.get((1,3)) >>> matrix.get((1,3), 0) 0

(13)

Aliases, cópias

Noções estudadas esta semana

dicionário

coleção de pares (chave, valor); chaves podem ser de

qualquer tipo imutável, e valores de qualquer tipo

chave

item que é associado a um valor num dicionário; é usado

para localizar valores no dicionário

par chave-valor

cada um dos items guardado no dicionário

(14)

Aliases, cópias

Próximas aulas

Referências

Documentos relacionados

Tabela de medidas: todas as medidas especificadas na tabela de medida em anexo se referem à peça pronta, já tendo recebido a 1ª lavagem caso haja diferença na peça

§ 2º Os resultados dos Pedidos de Reconsideração dos (as) candidatos (as) para resultados da Prova de Método serão divulgados no dia 14 de novembro de 2019 , a partir das 17h00min,

De acordo com dados da Pesquisa Nacional por Amostra de Domicílios (PNAD) referente a 2011, o país ganhou 10 milhões de novos usuários em apenas três anos: de 2009 para 2011, o

• Precisamos refatorar nossa classe Tijolo para respeitar essa interface, e agora estamos livres para criar outras classes, como TijoloFurado (um tijolo com com um buraco no meio

PRODUTOS ORIUNDOS DA AGRICULTURA FAMILIAR -

O recurso à nação como narração enfatiza a insistência do poder político e a autoridade cultural naquilo que Derrida descreve “o excesso irredutível do sintático sobre

As internações por TB pulmonar representam hoje um grande desafio da saúde pública, geran- do altos custos ao Sistema Único de Saúde (SUS), já que conforme observado no Gráfico 4,

Certamente, diante da experiência frustrada de extirpar a noite com nosso sono, mas diante também da possibilidade de trazer com o signo este revelado para a