Como usar o defaultdict do Python?
Utilizando o tipo Python defaultdict para lidar com chaves ausentes
Um problema comum ao trabalhar com dicionários em Python é tentar acessar ou modificar chaves que não existem no dicionário. Isso resulta em um KeyError
e interrompe a execução do código. Para lidar com esse tipo de situação, a biblioteca padrão do Python fornece o tipo defaultdict
, uma classe semelhante a um dicionário disponível no módulo collections
.
O tipo defaultdict
em Python se comporta quase exatamente como um dicionário Python regular, mas se você tentar acessar ou modificar uma chave inexistente, o defaultdict
criará automaticamente a chave e gerará um valor padrão para ela. Isso torna o defaultdict
uma opção valiosa para lidar com chaves ausentes em dicionários.
Manipulando chaves ausentes em dicionários
Um problema comum ao trabalhar com dicionários em Python é como lidar com chaves ausentes. Se o seu código é baseado fortemente em dicionários, ou se você está criando dicionários dinamicamente o tempo todo, logo perceberá que lidar com exceções frequentes de KeyError
pode ser bastante irritante e adicionar complexidade extra ao seu código. Com os dicionários Python, você tem pelo menos quatro maneiras disponíveis de lidar com chaves ausentes:
- Uso da exceção
KeyError
- Uso do método
.get()
- Uso do método
.setdefault()
- Uso do tipo
defaultdict
Para evitar capturar exceções, o método .get()
é uma maneira segura de acessar chaves em um dicionário, pois ele retorna um valor padrão quando a chave não existe:
Da mesma forma, o método .setdefault()
pode ser usado para obter o valor de uma chave, mas também define um valor padrão para ela se a chave não existir:
No entanto, o uso do tipo defaultdict
pode ser mais conveniente em determinadas situações, especialmente quando você precisa lidar com chaves ausentes que requerem a geração de um valor padrão específico.
Entendendo o tipo Python defaultdict
O tipo defaultdict
é uma subclasse do tipo dict
e fornece a funcionalidade adicional de definir um valor padrão para chaves ausentes. A sintaxe básica para criar um defaultdict
é a seguinte:
Observe que default_factory
é uma função que é chamada sempre que uma chave ausente é acessada. Essa função deve retornar o valor padrão desejado para a chave ausente.
Usando o tipo Python defaultdict
Agora que entendemos o conceito de defaultdict
, vamos ver como usá-lo para operações de agrupamento, contagem e acumulação.
Agrupando itens
Uma tarefa comum ao trabalhar com dados é agrupá-los com base em um determinado critério. Com o tipo defaultdict
, você pode agrupar itens de uma lista usando uma chave específica. Considere o seguinte exemplo:
Saída:
Nesse exemplo, criamos um defaultdict
com list
como valor padrão. Em seguida, percorremos a lista data
e adicionamos as cores correspondentes a cada fruta na lista de cores associada a essa fruta no dicionário grouped_data
.
Agrupando itens únicos
Às vezes, você também pode querer agrupar apenas as ocorrências únicas de determinados itens. Para fazer isso, você pode usar o tipo set
como valor padrão em um defaultdict
. Veja o exemplo a seguir:
Saída:
Nesse exemplo, estamos usando um defaultdict
com set
como valor padrão. Assim como antes, percorremos a lista data
e adicionamos as cores correspondentes a cada fruta no conjunto de cores associado a essa fruta no dicionário unique_grouped_data
. O valor set
garante que apenas as cores únicas sejam armazenadas.
Contando itens
Outra tarefa comum é contar a ocorrência de determinados itens em uma lista. Com o tipo defaultdict
, você pode contar itens facilmente usando um int
como valor padrão. Veja o exemplo a seguir:
Saída:
Nesse exemplo, criamos um defaultdict
com int
como valor padrão. Ao percorrer a lista data
, incrementamos o contador para cada item encontrado.
Acumulando valores
Em algumas situações, você pode querer acumular valores correspondentes a uma determinada chave em vez de substituí-los. Para fazer isso, você pode usar uma função lambda
como valor padrão em um defaultdict
. Veja o exemplo a seguir:
Saída:
Nesse exemplo, estamos usando uma função lambda
como valor padrão em um defaultdict
. A função lambda
retorna 0
sempre que uma chave ausente é acessada. Em seguida, percorremos a lista data
e acumulamos a quantidade de frutas correspondente a cada chave no dicionário total_fruits
.
Conclusão
Neste tutorial, você aprendeu como usar o tipo defaultdict
em Python para lidar com chaves ausentes em dicionários. Vimos que o defaultdict
é uma alternativa conveniente ao dicionário regular do Python quando você precisa lidar com chaves ausentes. Além disso, exploramos diferentes maneiras de usar o defaultdict
para agrupar itens, contar itens e acumular valores.
Esse conhecimento permitirá que você utilize o tipo defaultdict
de forma eficaz em seus desafios de programação diários. Agora você pode aproveitar ao máximo esse recurso poderoso para melhorar sua produtividade ao lidar com dicionários em Python.