Python básico - Caderno 01

Tipos e objetos

Este caderno busca conter a primeira parte sobre Python básico e inclui:

  • Por que Python?
  • Instalação e configurações
  • Variáveis
  • Input de usuário
  • Listas e tuplas
  • Dicionários

Por que Python?

Python é uma linguagem interpretada de alto nível amplamente utilizada nas mais diversas áreas devido a sua capacidade de satisfazer as necessidades dos iniciantes até os mais experientes, por ser uma linguagem multiparadigma, ela suporta tanto códigos voltados a orientação a objetos quanto escritos de forma estrutural ou em forma de script. Sua sintaxe é simples e limpa, ótima para um desenvolvimento rápido, testes e manutenção. Sua ampla comunidade nos fornece uma incrível gama de bibliotecas e frameworks que cobrem desde desenvolvimento web até tópicos como aprendizado de máquina e estatística. Sua popularidade vem crescendo gradualmente, para demonstrar isto, mostraremos uma pesquisa anual realizada pela equipe do mais famoso fórum de linguagens de programação, o stackoverflow. Veja os resultados da pesquisa referente a 2019 abaixo:

Entre as mais amadas

Python aparece em segundo lugar entre as linguagens mais amadas deste ano, perdendo apenas para Rust.

image.png

A mais desejada

Python aparece como a linguagem mais desejada, isto é, os programdores ou desejam aprende-la ou utiliza-la em seu ambiente de trabalho

image.png

Para saber mais a respeito desta pesquisa acesse o seguinte link.

Em resumo estas são as características que fazem a linguagem estar em grande destaque.

  • Linguagem de uso geral
  • Escalabilidade
  • Simplicidade dos códigos
  • Usabilidade
  • Velocidade de aplicação
  • Vasta comunidade diposta a ajudar
  • Incrível gama de bibliotecas
  • Multiparadigma

Instalação e configurações

Windows

Acesse o site https://www.python.org/downloads/ e siga as instruções do próprio instalador.

python-windows.png

Linux

Em distribuições Linux o python geralmente já vem instalado na versão 2.7.

Abra o terminal (CTRL + ALT + T) e use o seguinte comando para checar a versão e se realmente foi instalado.

$ python --version

Estaremos usando a versão 3.x do Python nesta oficina, verifique se já se encontra instalado usando

$ python3 --version

Caso algum erro aconteça devemos instalar a versão mais recente do Python, para isto, ainda no terminal digite.

$ sudo apt-get update

Logo após isto, execute o seguinte comando.

$ sudo apt-get install python3

Outras formas de instalação

O Anaconda é uma plataforma que gerencia pacotes e IDEs, como Jupyter Notebook, Spyder e VS Code, sendo ideal para data science.

Acesse o site https://www.anaconda.com/distribution/ e escolha o seu sistema operacional e a versão desejada do Python para instalação. anaconda-site.png

Variáveis

Tipos de Variáveis

Como toda linguagem de programação, o Python possui uma série de tipos de variáveis. Aqui estudaremos as mais comuns e utilizaremos alguns métodos pertencentes a estes tipos.

String
Strings são cadeias de caracteres usadas para representar palavras ou elementos textuais em um programa.

saudacao = 'Olá'
type(saudacao)
str

Integer
São variáveis que guardam números inteiros.

numero_favorito = 7
type(numero_favorito)
int

Float
São os pontos flutuantes ou números reais.

altura = 1.70
type(altura)
float

Boolean
Booleanos são variáveis que possuem os valores True ou False, são geralmente utilizadas para controle de fluxo.

sabe_nadar = False
type(sabe_nadar)
bool

Strings

Formatando a string

meu_nome = 'dAnIel'
print(meu_nome.title())
print(meu_nome.lower())
print(meu_nome.upper())
Daniel
daniel
DANIEL

Removendo espaços em branco.

meu_nome = '     \n\n dAnIel \t\t\n   '
print(meu_nome)
 dAnIel 		

O método rstrip remove os espaços em branco à direita da string.

print(meu_nome.rstrip())
 dAnIel

Análogo ao método rstrip o método lstrip remove os espaços em braco à esquerda da string.

print(meu_nome.lstrip())
dAnIel 		

strip remove espaços de amobos os lados.

print(meu_nome.strip())
dAnIel

Veja que meu_nome não foi modificado.

print(meu_nome)
 dAnIel 		
meu_nome = '      dAnIel    '
print(meu_nome.strip().title())
Daniel

Concatenando Strings

pagodeiro_um = 'Péricles'
pagodeiro_dois = 'Mumuzinho'
pagodeiro_tres = 'Thiaguinho'

mensagem = 'canta pagode.'

print(pagodeiro_um + ' ' + mensagem)
print(pagodeiro_dois + ' ' + mensagem)
print(pagodeiro_tres + ' ' + mensagem)
Péricles canta pagode.
Mumuzinho canta pagode.
Thiaguinho canta pagode.
print(pagodeiro_um + ' e ' + pagodeiro_tres + ' já foram do grupo Exaltasamba.')
Péricles e Thiaguinho já foram do grupo Exaltasamba.

Python é uma liguagem dinamicamente tipada, no entanto ao tentar somar um número a uma string precisamos converter o tipo do número em uma string explicitamente!

ano_atual = 2019
print('O ano de ' + ano_atual + ' no calendário chinês equivale ao ano do porco.')
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-14-9017529bc686> in <module>
      1 ano_atual = 2019
----> 2 print('O ano de ' + ano_atual + ' no calendário chinês equivale ao ano do porco.')


TypeError: can only concatenate str (not "int") to str
print('O ano de ' + str(ano_atual) + ' no calendário chinês equivale ao ano do porco.')
O ano de 2019 no calendário chinês equivale ao ano do porco.

Formatação

Como vimos anteriormente, Python possui uma grande facilidade em lidar com strings e possui ferramentas poderosas de formatação. Vejamos os exemplos.

A primeira notação a ser apresentada foi herdada da linguagem C. Basta colocar ”%” seguido do tipo da variável, toda vez que desejarmos colocar o valor de uma variável em uma string. No final da string devemos colocar mais uma vez ”%” e um array contendo o as variáveis em ordem que elas aparecem na string.

Para os tipos de variáveis mais comuns.

  • %s para colocar strings;
  • %i para inteiros;
  • %.xf para flotas, onde x, é o número de casas decimais desejados para o float;
print('%s e %s já foram do grupo Exaltasamba.' % (pagodeiro_um, pagodeiro_tres))
Péricles e Thiaguinho já foram do grupo Exaltasamba.
nome = 'Daniel'
idade = 22
altura = 1.75984

print('Olá, sou %s tenho %i anos e %f de altura.' % (nome, idade, altura))
print('Olá, sou %s tenho %i anos e %.2f de altura.' % (nome, idade, altura))
Olá, sou Daniel tenho 22 anos e 1.759840 de altura.
Olá, sou Daniel tenho 22 anos e 1.76 de altura.

Ao colocar a “f” no começo de uma string, estamos dizendo ao Python que esta string receberá informações de formatação. Para colocar os valores das variáveis na string basta colocar o nome de variável ou expressão dentre ”{}”. Veja o exemplo!

print(f'Olá, sou {nome} tenho {idade} anos e {round(altura, 2)} de altura.')
Olá, sou Daniel tenho 22 anos e 1.76 de altura.

Podemos utilizar '\n' e '\t' para respectivamente quebrar linhas e gerar tabulações na formatação de nossa string.

# Utilizando \n
print('Este e texto está na primeira linha, \njá este se encontra na segunda linha.')
Este e texto está na primeira linha, 
já este se encontra na segunda linha.
# Utilizando \n e \t
print("linguages de programacao que estou aprendendo: \n\t- python \n\t- r \n\t- java \n\t- clojure \n\t- javascript")
linguages de programacao que estou aprendendo: 
	- python 
	- r 
	- java 
	- clojure 
	- javascript

Utilizando outros operadores matemáticos em strings

'NaN ' * 10 + ' batman!'.upper()
'NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN  BATMAN!'

Indices em strings

fruta = 'abacaxi'

print(fruta[0])
print(fruta[1])
print(fruta[2])
print(fruta[3])
a
b
a
c

Tamanho de strings

Podemos verificar o tamanho de uma string utilizando a função len

len(fruta)
7
print(fruta.title() + ' possui ' + str(len(fruta)) + ' letras.')
Abacaxi possui 7 letras.

Essa liberdade e simplicidade com que o Python trata as strings é de grande ajuda para manipular dados deste tipo. Podendo gerar resultados interessantes como o seguinte:

for numero_de_pontos in range(1, 25, 2):
    print(' ' * int(50/2 - numero_de_pontos/2) + 
          'o' * numero_de_pontos + 
          ' ' * int(50/2 - numero_de_pontos/2))
                        o                        
                       ooo                       
                      ooooo                      
                     ooooooo                     
                    ooooooooo                    
                   ooooooooooo                   
                  ooooooooooooo                  
                 ooooooooooooooo                 
                ooooooooooooooooo                
               ooooooooooooooooooo               
              ooooooooooooooooooooo              
             ooooooooooooooooooooooo             

Acho que neste caso não foi tão interessante assim…

Integers

Operações matemáticas

soma = 1 + 1
print(soma)
print(type(soma))
2
<class 'int'>
subtracao = 1 - 1
print(subtracao)
print(type(subtracao))
0
<class 'int'>
multiplicacao = 4 * 2
print(multiplicacao)
print(type(multiplicacao))
8
<class 'int'>
potenciacao = 3 ** 2
print(potenciacao)
print(type(potenciacao))
9
<class 'int'>
resto = 11 % 3
print(resto)
print(type(resto))
2
<class 'int'>
divisao_com_resultado_inteiro = 20//3
print(divisao_com_resultado_inteiro)
6

Floats

Operações matemáticas

soma_float = 1.0 + 2.0
print(soma_float)
print(type(soma_float))
3.0
<class 'float'>
multiplicacao_float = 4.0 * 5.0
print(multiplicacao_float)
print(type(multiplicacao_float))
20.0
<class 'float'>
divisao = 4 / 2 
print(divisao)
print(type(divisao))
2.0
<class 'float'>
divisao = 4.0 / 7.00001
print(divisao)
print(type(divisao))
0.571427755103207
<class 'float'>
resto_float = 5.0 % 5.0
print(resto_float)
print(type(resto_float))
0.0
<class 'float'>

Booleans

True
True
False
False

Operadores de desigualdades

3 < 2
False
10 > 3
True
1 < 2 < 3
True
10 > 2 > 1 > -30
True

Operador de diferenca

'Terra'!='terra'
True

Operador de igualdade

'Terra'=='terra'
False

O operador and ou & checa se ambas condições são satisfeitas e retorna True caso isto aconteça e False caso contrário.

13 > 10 and 13 > 20
False
13 > 10 & 13 > 20
False
13 > 10 and 13 < 20
True
13 > 10 & 13 < 20
True

O operador or ou | checa se pelo menos uma das condições é satisfeita e retorna True caso isto realmente aconteça e False caso contrário.

a = True
b = False

print(a or b)
print(a | b)
True
True
a = False
b = False

print(a or b)
print(a | b)
False
False

O operador not retorna a negação do booleano.

not True
False
not False
True
not 7 > 10
True
not 7 < 10
False

O operador in verifica se um elemento esta contindo em um outro conjunto. Também pode ser utilizado em listas, um tipo de objeto que veremos posteriormente!

chuva = 'chuva'
guarda_chuva = 'guarda chuva'

chuva in guarda_chuva
True

Input de usuário

O que seria dos nossos programas se não pudessem interagir com o mundo lá fora, a função input() trava o terminal e aguarda por uma entrada do usuário para continuar sua execução.

nome_do_usuario = input('Digite seu nome: \n\t')

print('Olá, ' + nome_do_usuario + '.')
Digite seu nome: 
	Daniel
Olá, Daniel.

É importante dizer que mesmo a entrada sendo um número, a função input a retornará como uma string.

idade_do_usuario= input('Digite sua idade: \n\t')

print(nome_do_usuario + ' tem ' + idade_do_usuario + ' anos.')
print(type(idade_do_usuario))
Digite sua idade: 
	22
Daniel tem 22 anos.
<class 'str'>

Listas e Tupla

Listas e tuplas são objetos que guardam qualquer coleção de objetos de forma ordenada. Podemos inclusive ter listas dentro de listas, listas de strings e números, listas com dicionários, etc. São elementos muito importantes para guardar dados.

Listas

Criação de Listas

sistema_solar = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno']
print(sistema_solar)
['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno']
type(sistema_solar)
list

Índices

primeiro_planeta = sistema_solar[0]
terceiro_planeta = sistema_solar[2]
print('O primeiro planeta do Sistema Solar é:\n\t- ' + primeiro_planeta + '\n')
print('O terceiro planeta do Sistema Solar é:\n\t- ' + terceiro_planeta)
O primeiro planeta do Sistema Solar é:
	- Mercúrio

O terceiro planeta do Sistema Solar é:
	- Terra

Usando intervalos de indices

sistema_solar[3:6]
['Marte', 'Júpiter', 'Saturno']

Intervalos no Python, são sempre fechados à esquerda e abertos à direita. Da seguinte forma:
\(K = [1, 2, 3, 4)\) \(1 \in K\) \(2 \in K\) \(3 \in K\) \(4 \notin K\)

sistema_solar[0:1]
['Mercúrio']

Equivale a sistema_solar[:1]

sistema_solar[:1]
['Mercúrio']
sistema_solar[:3]
['Mercúrio', 'Vênus', 'Terra']
sistema_solar[3:]
['Marte', 'Júpiter', 'Saturno']

Indices negativos retornam da última posição até a primeira, ou seja, sistemSolar[-1] retornará a última posição da lista

sistema_solar[-1]
'Saturno'
sistema_solar[-2:]
['Júpiter', 'Saturno']
sistema_solar[:-4]
['Mercúrio', 'Vênus']
sistema_solar[3] = 'Sol'
print(sistema_solar)
['Mercúrio', 'Vênus', 'Terra', 'Sol', 'Júpiter', 'Saturno']

Veja que:

print(sistema_solar[-2:])
print(sistema_solar[4:])
sistema_solar[-2:] == sistema_solar[4:]
['Júpiter', 'Saturno']
['Júpiter', 'Saturno']





True

Também podemos criar listas vazias.

lista_vazia = list()
lista_vazia
[]
lista_vazia_2 = []
lista_vazia_2
[]

Adicionando e Removendo elementos

Append

O método append adiciona à ultima posição da lista o objeto recebido como argumento.

sistema_solar = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno']
sistema_solar.append('Netuno')
print(sistema_solar)
['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Netuno']
Insert

O método insert adiciona a qualquer posição da lista, o objeto passado como argumento.

sistema_solar.insert(6, 'Urano')
print(sistema_solar)
['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']
Remove

O método remove retira uma única ocorrência do valor passado como arguemento.

sistema_solar.remove('Saturno')
print(sistema_solar)
['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Urano', 'Netuno']
Pop

O método pop remove a última posição da lista e a retorna.

sistema_solar.append('Plutão')
print(sistema_solar)
['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Urano', 'Netuno', 'Plutão']
planeta_anao = sistema_solar.pop()
print('Estamos retirando ' + planeta_anao + ' pois ele se trata de um planeta anão.')
Estamos retirando Plutão pois ele se trata de um planeta anão.
print(sistema_solar)
['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Urano', 'Netuno']

Também podemos usar o método pop passando uma posição da lista como argumento, desta forma ele removerá o objeto daquela posição e o retornará.

sistema_solar.pop(2)
'Terra'

Algumas funções úteis

len

Verifica o tamanho de uma lista.

sistema_solar = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']
qt_planetas = len(sistema_solar)
print(f'O Sistema Solar possui {str(qt_planetas)} planetas.')
O Sistema Solar possui 8 planetas.

Organizando listas

Sort

O método sort altera a lista deixando-a em ordem crescente se forem números e na ordem alfabética em caso de string.

sistema_solar.sort()
print(sistema_solar)
['Júpiter', 'Marte', 'Mercúrio', 'Netuno', 'Saturno', 'Terra', 'Urano', 'Vênus']

Podemos utilizar o argumetno reverse = True para alterar nossa lista para a ordem decrescente.

sistema_solar.sort(reverse=True)
print(sistema_solar)
['Vênus', 'Urano', 'Terra', 'Saturno', 'Netuno', 'Mercúrio', 'Marte', 'Júpiter']
Sorted

A função sorted() recebe como argumento uma lista, a diferença desta função para o método sort é que a função sorted não altera nosso objeto, ao invés disto, ela retorna uma cópia ordenada de nossa lista.

sistema_solar = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']
sistema_solar_ordem_alfabetica = sorted(sistema_solar)
print(sistema_solar)
print(sistema_solar_ordem_alfabetica)

sistema_solar = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']
sistema_solar_ordem_alfabetica = sorted(sistema_solar, reverse=True)
print(sistema_solar_ordem_alfabetica)
['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']
['Júpiter', 'Marte', 'Mercúrio', 'Netuno', 'Saturno', 'Terra', 'Urano', 'Vênus']
['Vênus', 'Urano', 'Terra', 'Saturno', 'Netuno', 'Mercúrio', 'Marte', 'Júpiter']

Atenção: Ao ordenar strings letras maiúsculas são postas a frente de letras minúsculas.

sorted(["a","A"])
['A', 'a']
sorted(["A","c","b","a","B","C"])
['A', 'B', 'C', 'a', 'b', 'c']
Reverse

O método reverse inverte a posição dos objetos em nossa lista.

sistema_solar = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']

sistema_solar.sort()
print(sistema_solar)
sistema_solar.reverse()
print(sistema_solar)
sistema_solar.reverse()
print(sistema_solar)
sistema_solar.reverse()
print(sistema_solar)
['Júpiter', 'Marte', 'Mercúrio', 'Netuno', 'Saturno', 'Terra', 'Urano', 'Vênus']
['Vênus', 'Urano', 'Terra', 'Saturno', 'Netuno', 'Mercúrio', 'Marte', 'Júpiter']
['Júpiter', 'Marte', 'Mercúrio', 'Netuno', 'Saturno', 'Terra', 'Urano', 'Vênus']
['Vênus', 'Urano', 'Terra', 'Saturno', 'Netuno', 'Mercúrio', 'Marte', 'Júpiter']
sistema_solar = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']
sistema_solar.reverse()
print(sistema_solar)
['Netuno', 'Urano', 'Saturno', 'Júpiter', 'Marte', 'Terra', 'Vênus', 'Mercúrio']

Copiando listas

Se temos uma lista alocada em uma variável, se atribuírmos esta variável a outra variável as duas variáveis terão o mesmo endereço de memória, ou seja, qualquer modificação feita em qualquer uma das listas terá o mesmo efeito na outra.
O mesmo endereço de memória aponta para as duas variáveis. Veja o exemplo:

planetas = sistema_solar
planetas.append('Kepler 22b')
planetas.append('Upsilon Andromedae b')
planetas.append('WASP-11b/HAT-P-10b')
print(planetas)
['Netuno', 'Urano', 'Saturno', 'Júpiter', 'Marte', 'Terra', 'Vênus', 'Mercúrio', 'Kepler 22b', 'Upsilon Andromedae b', 'WASP-11b/HAT-P-10b']
planetas==sistema_solar
True

Observe que mesmo adicionando novos planetas a lista planetas, a lista sistemaSolar recebe as mesmas modificação.

print(sistema_solar)
['Netuno', 'Urano', 'Saturno', 'Júpiter', 'Marte', 'Terra', 'Vênus', 'Mercúrio', 'Kepler 22b', 'Upsilon Andromedae b', 'WASP-11b/HAT-P-10b']

is verifica se duas variáveis possuem o mesmo endereço de memória.

planetas is sistema_solar
True

Printando o endereço de memória.

print(id(planetas))
print(id(sistema_solar))
139739987112960
139739987112960

Se não desejamos que as duas variáveis possuam o mesmo endereço de memória, precisamos atribuir a nova lista uma cópia da lista a ser atribuída.

sistema_solar = ['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']
planetas = sistema_solar[:]   # Cria uma cópia da lista sistemaSolar
sistema_solar == planetas
True
planetas.append('Kepler 22b')
planetas.append('Upsilon Andromedae b')
planetas.append('WASP-11b/HAT-P-10b')

print(sistema_solar)
print(planetas)
['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno']
['Mercúrio', 'Vênus', 'Terra', 'Marte', 'Júpiter', 'Saturno', 'Urano', 'Netuno', 'Kepler 22b', 'Upsilon Andromedae b', 'WASP-11b/HAT-P-10b']
sistema_solar==planetas
False
sistema_solar is planetas
False

Verifique que agora as duas variáveis possuem endereços de memória diferentes

print(id(planetas))
print(id(sistema_solar))
139739986954112
139739987732544

Listas numéricas

A função range retorna um iterável, tipos de objetos capazes de receberem iterações sob eles, como por exemplo for loops, que serão vistos posteriormente. Neste caso, utilizaremos a função range apenas para preencher uma lista com números em sequência.
Não se esquecendo que range(a, b) é um intervalo fechado em a e aberto em b.

numeros = list(range(1,11))
numeros
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numeros_impares = list(range(1, 11, 2))
numeros_impares
[1, 3, 5, 7, 9]
Estatísticas básicas com listas numericas
numeros = list(range(1,11))
sum(numeros)
55
min(numeros)
1
max(numeros)
10

O que mais listas podem conter?

colecao = [1, 2, 3, [4, 5, 6, ['strings', 'strings']], {"chave": "valor"}]
colecao
[1, 2, 3, [4, 5, 6, ['strings', 'strings']], {'chave': 'valor'}]

Tuplas

Tuplas são objetos parecidos com listas, sua principal diferença é que tuplas são imutáveis. Não podemos modificar os valores de uma tupla depois de criada.

dimensoes = (10, 43)
dimensoes
(10, 43)
dimensoes[0]
10

Tentando mudar o valor da primeira posição da tupla para.

dimensoes[0] = 20
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-107-8d26a12a0b4f> in <module>
----> 1 dimensoes[0] = 20


TypeError: 'tuple' object does not support item assignment

Verificamos que a tentativa de atribuir um valor diferente a uma posição da tupla falhou, para mudar o valor de uma tupla devemos criar uma outra tupla com as alterações desejadas.

dimensoes = (20, 50)
dimensoes
(20, 50)

Dicionários

Dicionários são objetos muito utilizados para guardar informações, sua estrutura é da forma chave-valor. Cada chave pode conter diferentes tipos de valores,ou seja, enquanto uma chave guarda valores númericos outra chave pode quardar listas, strings ou até mesmo outros dicionários.
Dicionários não guardam posição, veremos como criar dicionários que guardam a posição de suas chaves posteriormente.

Criando dicionários

linguas_paises = {
    'japao': 'japones',
    'eua': 'ingles',
    'brasil': 'portugues',
    'portugal': 'portugues',
    'china': ['mandarin', 'cantones'],
    'canada': ['frances', 'ingles']
}

print(linguas_paises)
{'japao': 'japones', 'eua': 'ingles', 'brasil': 'portugues', 'portugal': 'portugues', 'china': ['mandarin', 'cantones'], 'canada': ['frances', 'ingles']}
print(linguas_paises['japao'])
print(linguas_paises['canada'])
print(linguas_paises['brasil'])
print(linguas_paises['china'][1])
japones
['frances', 'ingles']
portugues
cantones
brasil = {
    "populacao": 0,
    "areaTerritorial": "8.516.000 km2",
    "continente": "america do sul"
}
print(brasil['areaTerritorial'])
print(brasil['continente'].title())
8.516.000 km2
America Do Sul

Podemos alterar o valor de uma chave da seguinte forma

print(brasil['populacao'])
brasil['populacao'] = '209.3 milhões'
print(brasil['populacao'])
0
209.3 milhões

E ainda podemos adicionar outros conjutos de chave-valor ao nosso dicionário.

brasil['lingua'] = 'portugues'
print(brasil)
{'populacao': '209.3 milhões', 'areaTerritorial': '8.516.000 km2', 'continente': 'america do sul', 'lingua': 'portugues'}

Inclusive podemos utilizar dicionários para claro, criar dicionários.

dicionario_pt_jp = {
    'bom_dia': {"romaji": "ohayou gozaimasu", "jp": "おはようございます"},
    'carro': {"romaji": "kuruma", "jp": "車"},
    'mulher':{"romaji": "onna no hito", "jp": "女の人"},
    'homem':{"romaji": "otoko no hito", "jp": "男の人"},
    'crianca': {"romaji": "kodomo", "jp": "子供"}
}
print(str(dicionario_pt_jp) + '\n')
print(str(dicionario_pt_jp['bom_dia']) + '\n') 
print(str(dicionario_pt_jp['crianca']['jp']) + '\n')
print(dicionario_pt_jp['mulher']['romaji'])
{'bom_dia': {'romaji': 'ohayou gozaimasu', 'jp': 'おはようございます'}, 'carro': {'romaji': 'kuruma', 'jp': '車'}, 'mulher': {'romaji': 'onna no hito', 'jp': '女の人'}, 'homem': {'romaji': 'otoko no hito', 'jp': '男の人'}, 'crianca': {'romaji': 'kodomo', 'jp': '子供'}}

{'romaji': 'ohayou gozaimasu', 'jp': 'おはようございます'}

子供

onna no hito

Referências

MATTHES, Eric. Python Crash Course: A Hands-On, Project-Based Introduction to Programming. San Francisco: No Starch Press, 2016.
LUTZ, Mark. Learning Python. Estados Unidos: O’Reilly Media, 2013.