🎉 SEMANA DO CONSUMIDOR

Últimos dias para comprar os cursos com 50% de desconto

Ver detalhes

Postado em em 4 de julho de 2024

Aprenda a utilizar a biblioteca collections no Python! Esta biblioteca adiciona novas funcionalidades às estruturas de dados do Python, tornando-as mais práticas e eficientes.

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Biblioteca Collections no Python – Estruturas de Dados

Na aula de hoje, você aprenderá como usar a biblioteca collections no Python, uma ferramenta poderosa para trabalhar com estruturas de dados.

Esta biblioteca oferece diversas funcionalidades que facilitam a resolução de problemas de maneira mais prática e eficiente. Entre elas, veremos as estruturas: Counter, defaultdict, ChainMap, deque e namedtuple.

Faça o download do material disponível nesta aula e vem comigo aprender mais sobre essa importante biblioteca!

Biblioteca Collections – Qual o seu Objetivo?

A collections é uma biblioteca padrão do Python, ou seja, ela já vem instalada com o Python. Para utilizá-la, basta importar a biblioteca ou as funcionalidades específicas que você deseja usar.

Esta biblioteca oferece estruturas de dados auxiliares com funcionalidades extras quando comparadas as estruturas de dados padrão do Python (listas, tuplas e dicionários), tornando a resolução de desafios e problemas muito mais fácil e eficiente.

Counter – Dicionários para Contar Ocorrências

O Counter é uma subclasse do dicionário presente na biblioteca collections, que facilita a contagem de elementos em um iterável. Ele pode ser utilizado quando você precisa determinar a quantidade de ocorrências dos itens em um iterável.

Você pode gerar um Counter a partir de qualquer iterável, como uma lista, uma string ou mesmo um dicionário. Por exemplo, vamos utilizar o Counter para gerar um dicionário a partir da lista estoque.

# counter
from collections import Counter

estoque = ["iphone", "iphone", "ipad", "airpod", "ipad", "iphone", "iphone", "airpod", "macbook"]

dic_counter = Counter(estoque)
print(dic_counter)
Counter – Dicionários para Contar Ocorrências

Com o dicionário criado, você pode manipulá-lo e utilizá-lo como um dicionário comum, inclusive passando a chave para acessar o valor dele.

print(dic_counter["iphone"])
Counter – Dicionários para Contar Ocorrências

Dessa forma, você consegue ter um controle de ocorrências e quantidades de cada elemento dentro da lista e pode acessar esses valores facilmente.

Default Dict – Dicionário com Valor Padrão

O defaultdict também é uma subclasse do dicionário que podemos utilizar para criação de dicionários com valores padrão. Com ele, você pode acessar qualquer chave de um dicionário e, caso ela não exista, ele automaticamente fornecerá o valor padrão.

Para criar um defaultdict, vamos importá-lo e definir qual o tipo de elemento esse dicionário irá armazenar. Por exemplo, podemos criar um dicionário para organizar os vendedores em listas, de acordo com as metas batidas.

from collections import defaultdict
vendas = {"André": 1000, "João": 2000, "Lira": 500, "Amanda": 1500, "Carol": 3000, "Marcus": 200, "Camila": 400, "Andreia": 8000}

meta1 = 1000
meta2 = 2000

dic_bonus = defaultdict(list)

for vendedor in vendas:
    valor_vendas = vendas[vendedor]
    if valor_vendas > meta2:
        dic_bonus["meta2"].append(vendedor)
    elif valor_vendas > meta1:
        dic_bonus["meta1"].append(vendedor)
    else:
        dic_bonus["sem meta"].append(vendedor)
print(dic_bonus)
Default Dict – Dicionário com Valor Padrão

Nesse caso, estamos inicializando o dicionário como um defaultdict de listas e, em seguida, atribuindo os vendedores para as chaves meta2, meta1 e sem meta. Perceba que em nenhum momento precisamos definir as chaves do dicionário dic_bonus.

Além disso, se tentarmos acessar uma chave não existente nesse dicionário, ele inicializará e retornará uma lista vazia.

print(dic_bonus["super meta"])

O defaultdict é útil para contagem de itens, agrupamento de listas e outras operações que requerem um valor padrão para chaves não existentes.

ChainMap – Conjunto de Dicionários

O ChainMap é uma classe da biblioteca collections que facilita a combinação de múltiplos dicionários em uma única visualização.

Essa funcionalidade é muito útil quando precisamos trabalhar com várias fontes de dados ao mesmo tempo, sem precisar mesclar os dicionários manualmente.

Para utilizar o ChainMap, basta importá-lo e passar os dicionários que desejamos combinar.

# ChainMap
brinquedos = {'Lego': 30, 'Banco Imobiliário': 10}
informatica = {'Tablet': 5, 'Mouse': 30, 'Iphone': 15}
roupas = {'Jeans': 150, 'Camisa': 100}

from collections import ChainMap

estoque = ChainMap(brinquedos, informatica, roupas)
print(estoque)
ChainMap – Conjunto de Dicionários

Como resultado temos esse ChainMap chamado estoque que pode ser manipulado normalmente como um dicionário, mesmo que na prática não tenhamos de fato mesclado os três dicionários existentes.

print(estoque["Tablet"])
ChainMap – Conjunto de Dicionários

Essa estrutura é interessante pois mantém as estruturas iniciais enquanto gera um dicionário completo que considerará todas as chaves existentes nos dicionários originais.

print(list(estoque.keys()))
ChainMap – Conjunto de Dicionários

Deque – Double-Ended Queue

O deque, ou double-ended queue, pode ser usado para criar uma estrutura de dados semelhante a uma lista, porém, diferente de uma lista comum, o deque aceita a inserção e remoção de valores em ambas as extremidades (começo e fim da lista).

Para criar um deque podemos declará-lo de forma semelhante a uma lista.

# deque
from collections import deque

fila = deque(["item1", "item2", "item3"])

Feito isso, ele permitirá a inserção de elementos no final ou no início dessa lista, utilizando os métodos append, para adicionar um item ao final da lista, ou appendleft, para adicionar no começo.

fila.append("item4")
print(fila)

fila.appendleft("item5")
print(fila)
Deque – Double-Ended Queue

Da mesma forma, podemos remover elementos do final ou do início do deque usando os métodos pop e popleft.

fila.pop()
print(fila)

fila.popleft()
print(fila)
Deque – Double-Ended Queue

Namedtuple – Tupla Nomeada

Por fim, vamos ver a estrutura namedtuple. Essa classe da biblioteca collections funciona de forma semelhante a um dicionário, mas utilizando a estrutura de uma tupla.

Com ela, podemos criar tuplas com campos nomeados, tornando o código mais legível e acessível. Além disso, é possível acessar e manipular os elementos da tupla através dos nomes dados a eles ao invés dos índices.

Para criar uma namedtuple, precisamos defini-la e especificar os nomes de cada campo. Em seguida, podemos criar uma instância dessa tupla nomeada.

# namedtuple
from collections import namedtuple

Produto = namedtuple("Produto", ["nome", "preco", "tamanho"])
produto1 = Produto("camisa", 150, "M")

print(produto1.nome)
Namedtuple – Tupla Nomeada

Por ser uma tupla, ainda podemos acessar seus valores através do índice, mas utilizando os nomes tornamos o código muito mais claro e facilitamos a manipulação dos dados.

print(produto1[1])
print(produto1.preco)
Namedtuple – Tupla Nomeada

A namedtuple é muito útil para criarmos registros legíveis, facilitando a manutenção e a clareza do código.

Conclusão – Biblioteca Collections no Python – Estruturas de Dados

Nessa aula, você aprendeu como utilizar a biblioteca collections no Python, uma ferramenta extremamente útil e poderosa para trabalhar com estruturas de dados.

Com ela, podemos adicionar funcionalidades às listas, tuplas e dicionários, trabalhando com estruturas auxiliares que nos permitem uma manipulação completa e eficiente dos dados. Agilizando nossos trabalhos e a resolução de problemas com Python!

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Posts mais recentes da Hashtag Treinamentos

Diego Monutti

Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.