Lab06 - Dicionários e conjuntos
Lista de Exercícios: Loops (for
e while
) e Estruturas de Dados (dicionarios
, conjuntos
, lista
e tupla
)¶
Neste notebook, você encontrará exercícios para praticar conceitos relacionados a loops (for
e while
) e estruturas de dados (dicionarios
, conjuntos
,lista
e tupla
).
Dicas Importantes¶
- Não altere os nomes dos arquivos ou funções: Isso pode fazer com que os testes automáticos falhem, mesmo que sua solução esteja correta.
- Leia os erros com atenção: Eles podem fornecer dicas sobre o que está errado em seu código.
- Peça ajuda: Se estiver tendo dificuldades, não hesite em pedir ajuda ao professor ou colegas.
- Contagem de Palavras
Escreva uma função chamada
contar_palavras
que recebe uma string e retorna um dicionário onde as chaves são palavras únicas e os valores são a contagem de cada palavra.
dica: use o metodo split()
para quebrar o texto em uma lista de palavras.
Exemplo: a função recebe oi oi ola oi oi ola oi oi oi ola
e retorna {'oi': 7, 'ola': 2, 'ola,': 1}
## sua solução aqui...
def contar_palavras(texto):
palavras = texto.split()
dicionario = {}
for palavra in palavras:
palavra = palavra.lower()
if palavra in dicionario:
dicionario[palavra] += 1
else:
dicionario[palavra] = 1
return dicionario
print(contar_palavras("oi oi ola oi oi ola oi oi oi ola "))
{'oi': 7, 'ola': 3}
- Juntando Dicionários
Escreva uma função chamada
juntar_dicionarios
que recebe dois dicionários como argumento e retorna um único dicionário que contém todas as chaves e valores dos dois dicionários originais. Se houver chaves duplicadas, o valor do segundo dicionário deve prevalecer.
Exemplo: a função recebe {"a":1,"b":2,"c":3}, {"b":1,"c":2,"d":3}
e retorna {'a': 1, 'b': 1, 'c': 2, 'd': 3}
## sua solução aqui...
def juntar_dicionarios(dict1, dict2):
dict1.update(dict2)
return dict1
a = {"a":1,"b":2,"c":3}
b = {"e":1,"f":2,"d":3}
print(juntar_dicionarios(a,b))
{'a': 1, 'b': 2, 'c': 3, 'e': 1, 'f': 2, 'd': 3}
- Ordenação de Dicionário por Valor
Escreva uma função chamada
ordenar_por_valor
que recebe um dicionário e retorna uma lista de tuplas ordenada pelos valores.
dica: use a função sorted
e pesquise sobre a função lambda
Exemplo: a função recebe {"e":10,"f":2,"d":63}
e retorna [('f', 2), ('e', 10), ('d', 63)]
def ordenar_por_valor(dic):
# Função auxiliar para retornar o valor do item do dicionário
def get_value(item):
return item[1]
# Ordenando o dicionário pelos valores usando a função auxiliar
sorted_items = sorted(dic.items(), key=get_value) #A função get_value será chamada internamente por sorted para cada item do dicionário enquanto estiver sendo ordenado
return sorted_items
b = {"e":10,"f":2,"d":63}
print(ordenar_por_valor(b))
[('f', 2), ('e', 10), ('d', 63)]
## sua solução aqui...
def ordenar_por_valor(dic):
return sorted(dic.items(), key=lambda x: x[1])
b = {"e":10,"f":2,"d":63}
print(ordenar_por_valor(b))
[('f', 2), ('e', 10), ('d', 63)]
- Frequência de Caracteres
Escreva uma função chamada
frequencia_caracteres
que recebe uma string e retorna um dicionário onde as chaves são caracteres únicos e os valores são a contagem de cada caracter.
Exemplo: a função recebe "pensamento computacional com python é muito top!"
e retorna {'p': 4, 'e': 2, 'n': 4, 's': 1, 'a': 3, 'm': 4, 't': 5, 'o': 7, ' ': 6, 'c': 3, 'u': 2, 'i': 2, 'l': 1, 'y': 1, 'h': 1, 'é': 1, '!': 1}
## sua solução aqui...
def frequencia_caracteres(texto):
dicionario = {}
for char in texto:
if char in dicionario:
dicionario[char] += 1
else:
dicionario[char] = 1
return dicionario
print(frequencia_caracteres("pensamento computacional com python é muito top!"))
{'p': 4, 'e': 2, 'n': 4, 's': 1, 'a': 3, 'm': 4, 't': 5, 'o': 7, ' ': 6, 'c': 3, 'u': 2, 'i': 2, 'l': 1, 'y': 1, 'h': 1, 'é': 1, '!': 1}
- Inversão de Dicionário
Escreva uma função chamada
inverter_dicionario
que recebe um dicionário e retorna um novo dicionário onde as chaves e valores estão invertidos.
dica: use list comprehension nos items do dicionario
Exemplo: a função recebe {"e":10,"f":2,"d":63}
e retorna {10: 'e', 2: 'f', 63: 'd'}
def inverter_dicionario(dic):
dic_invertido = {}
for k, v in dic.items():
dic_invertido[v] = k
return dic_invertido
b = {"e":10,"f":2,"d":63}
print(inverter_dicionario(b))
{10: 'e', 2: 'f', 63: 'd'}
## sua solução aqui...
def inverter_dicionario(dic):
return {v: k for k, v in dic.items()}
b = {"e":10,"f":2,"d":63}
print(inverter_dicionario(b))
{10: 'e', 2: 'f', 63: 'd'}
- Agrupamento de Palavras por Tamanho
Escreva uma função chamada
agrupar_por_tamanho
que recebe uma lista de palavras e retorna um dicionário onde as chaves são tamanhos de palavras e os valores são listas de palavras desse tamanho.
Exemplo: a função recebe ["banana","cereja","com","python","legal","muito","top","!"]
e retorna {6: ['banana', 'cereja', 'python'], 3: ['com', 'top'], 5: ['legal', 'muito'], 1: ['!']}
## sua solução aqui...
def agrupar_por_tamanho(palavras):
dicionario = {}
for palavra in palavras:
tamanho = len(palavra)
if tamanho in dicionario:
dicionario[tamanho].append(palavra)
else:
dicionario[tamanho] = [palavra]
return dicionario
a = ["banana","cereja","com","python","legal","muito","top","!"]
print(agrupar_por_tamanho(a))
{6: ['banana', 'cereja', 'python'], 3: ['com', 'top'], 5: ['legal', 'muito'], 1: ['!']}
- Filtragem de Dicionário
Escreva uma função chamada
filtrar_dicionario
que recebe um dicionário e um número n. A função deve retornar um novo dicionário contendo apenas as chaves associadas a valores maiores que n.
Exemplo: a função recebe {"e":10,"f":2,"h":6,"j":8,"r":9,"d":63}
e retorna {'e': 10, 'j': 8, 'r': 9, 'd': 63}
## sua solução aqui...
def filtrar_dicionario(dic, n):
return {k: v for k, v in dic.items() if v > n}
b = {"e":10,"f":2,"h":6,"j":8,"r":9,"d":63}
n = 7
print(filtrar_dicionario(b,n))
{'e': 10, 'j': 8, 'r': 9, 'd': 63}
- Intersecção de Conjuntos
Escreva uma função chamada
interseccao_conjuntos
que recebe duas listas e retorna um conjunto contendo os elementos que aparecem em ambas as listas.
Exemplo: a função recebe [1,1,1,3,5,7,6,5,2], [2,4,2,1,2,5,43,2]
e retorna {1, 2, 5}
## sua solução aqui...
def interseccao_conjuntos(lista1, lista2):
return set(lista1) & set(lista2)
a = [1,1,1,3,5,7,6,5,2]
b = [2,4,2,1,2,5,43,2]
print(interseccao_conjuntos(a,b))
{1, 2, 5}