Lesson 11
Dicionários
1. Dicionários
Listas normais (matrizes) geralmente são um conjunto de elementos numerados, portanto, se você quiser fazer uma referência a qualquer item da lista, deverá especificar seu número. O número de elementos na lista identifica exclusivamente o item em si. Mas os números de identificação nem sempre são convenientes. Por exemplo, as rotas de trens na Rússia usam letras e números como código de identificação (número e um dígito), também código numérico-alfabético identifica os voos, ou seja, informações sobre vôos, trens ou identificação de aeronave devem ser armazenadas não como um número, mas como uma string de texto.
A estrutura de dados, que permite usar um tipo arbitrário de índice em vez de numérico, é chamada de dicionário ou matriz associativa . A estrutura de dados correspondente no Python é chamada de dict
.
Considere um exemplo simples. Obtenha o dicionário Capitals
, onde index é o nome do país, e o valor - o nome da capital deste país. Agora, para uma linha com o nome do país, podemos facilmente identificar seu capital.
# Crie capitais do dict vazio Capitals = dict() # Preencha com alguns valores Capitals['Russia'] = 'Moscow' Capitals['Ukraine'] = 'Kiev' Capitals['USA'] = 'Washington' Countries = ['Russia', 'France', 'USA', 'Russia'] for country in Countries: # Para cada país da lista, verifique se está no dicionário Capitais if country in Capitals: print('The capital of ' + country + ' is ' + Capitals[country]) else: print('The capital of ' + country + ' is unknown')
Portanto, cada elemento do dicionário consiste em dois objetos: chave e valores . Em nosso exemplo, key é o nome do país e o valor é o nome da capital. A chave identifica o elemento do dicionário, o valor é os dados correspondentes à chave dada. Os valores das chaves são únicos, ou seja, não pode haver duas chaves idênticas no dicionário.
Estamos acostumados a dicionários em torno de nós, os dicionários de papel habituais (definindo, monolíngüe, bilíngüe). Para definir o dicionário, a chave é a palavra (o título do artigo), e o valor é o próprio artigo e, para acessar o artigo, você deve especificar a palavra-chave.
Uma lista telefônica é outro exemplo de estrutura de dados do dicionário. Nesse caso, a chave é o nome e o valor é o número do telefone. Tanto para o dicionário quanto para a lista telefônica é fácil encontrar um elemento do dicionário com uma dada chave (por exemplo, se os registros são armazenados em ordem alfabética das teclas, você pode facilmente encontrar sua chave com uma busca binária), mas se a chave é desconhecido, e nós sabemos apenas o valor, a busca pelo elemento com o valor dado pode requerer uma visão consistente de todos os elementos do dicionário.
Uma característica importante do array associativo é que ele é dinâmico, isto é, você pode adicionar novos elementos com qualquer tecla e excluir os elementos existentes. A quantidade de memória usada é proporcional ao tamanho do array associativo. O acesso aos elementos de uma matriz associativa é mais lento do que para matrizes comuns, mas ainda bem rapidamente.
No Python, a chave pode ser qualquer tipo de dado imutável (não modificável): inteiros e números reais, strings, tuplas. A chave no dicionário pode não ser um conjunto, mas pode ser um elemento do tipo frozenset
: um tipo de dados analógico especial de um set
tipos que não pode ser modificado após a criação. O valor do elemento do dicionário pode ser qualquer tipo de dados, incluindo modificável.
2. Aplicando Dicionários
Os dicionários são usados nos seguintes casos:
Num['January'] = 1; Num['February'] = 2; ...
Um dicionário vazio pode ser criado usando a função dict()
ou um par vazio de chaves {}
(essa é a razão pela qual as chaves não podem ser usadas para criar um conjunto vazio). Para criar um dicionário com algum conjunto de valores iniciais, você pode usar as seguintes construções:
Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'} Capitals = dict(RA = 'Moscow', Ukraine = 'Kiev', USA = 'Washington') Capitals = dict([("Russia", "Moscow"), ("Ukraine", "Kiev"), ("USA", "Washington")]) Capitals = dict(zip(["Russia", "Ukraine", "USA"], ["Moscow", "Kiev", "Washington"])) print(Capitals)
Os dois primeiros métodos só podem ser usados para criar pequenos dicionários listando todos os seus elementos. Além disso, no segundo método, as chaves são passadas como parâmetros nomeados de dict
, portanto, neste caso, as chaves podem ser apenas strings e somente identificadores corretos. No terceiro e quarto caso, você pode criar grandes dicionários, se os argumentos transferidos forem uma lista pronta, que podem ser obtidos não apenas listando todos os elementos, mas que são construídos de qualquer outra forma durante a execução do programa. Na terceira maneira, a função dict
precisa receber uma lista onde cada elemento é uma tupla de dois elementos: chave e valor. O quarto método usa a função zip
, que precisa receber duas listas de tamanho igual: uma lista de chaves e uma lista de valores.
3. Trabalhando com itens de dicionário
Operação básica: obtendo o valor do elemento por sua chave. Está escrito exatamente como para listas: A[key]
. Se não houver nenhum elemento com a chave especificada no dicionário, ele gera a exceção KeyError
.
Outra maneira de definir o valor com base em uma chave é um método get
: A.get(key)
. Se não houver nenhum elemento com a chave get
no dicionário, ele retornará None
. Na forma com dois argumentos A.get(key, val)
método retorna val
, se um elemento com a chave de key
não está no dicionário.
Para verificar se um elemento pertence a um dicionário, as operações in
e not in
são usadas, da mesma forma que para conjuntos.
Para adicionar um novo item ao dicionário, basta atribuir um valor a ele: A[key] = value
.
Para remover um item do dicionário, você pode usar del A[key]
(a operação gera uma exceção KeyError
se não houver tal chave no dicionário). Aqui estão duas maneiras seguras de remover um item do dicionário.
A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'} key = 'ac' if key in A: del A[key] try: del A[key] except KeyError: print('There is no element with key "' + key + '" in dict') print(A)
No primeiro caso, nós verificamos preliminarmente a presença de um elemento, então pegamos e lidamos com a exceção.
Outra maneira de remover um item do dicionário é o método pop
: A.pop(key)
. Esse método retorna o valor do elemento removido e, se o elemento com a chave especificada não estiver no dicionário, uma exceção será levantada. Se o método pop
receber um segundo parâmetro, então, para o elemento ausente, ele retornará o valor desse parâmetro. Isso permite organizar com segurança a remoção do elemento do dicionário: A.pop(key, None)
.
4. Dicionário de iteração
Você pode facilmente percorrer as chaves de todos os itens no dicionário:
A = dict(zip('abcdef', list(range(6)))) for key in A: print(key, A[key])
Os métodos a seguir retornam a representação dos elementos do dicionário. As representações são semelhantes aos conjuntos, mas mudam, se você alterar os valores dos elementos. As keys
método retornam uma representação das chaves de todos os elementos, os values
retornam uma representação de todos os valores e os items
do método retornam uma representação de todos os pares (tuplas) de chaves e valores.
Assim, para uma verificação rápida se o valor val
está entre todos os valores do dicionário A
você deve usar val in A.values()
condição booleana val in A.values()
. Para percorrer as chaves e variáveis, você pode fazer o seguinte:
A = dict(zip('abcdef', list(range(6)))) for key, val in A.items(): print(key, val)