Mesclando Dicionários em Python: O Guia Rápido do Operador | no Python 3.9+
Como Unir Dois Dicionários em Uma Única Linha em Python
Unir múltiplos dicionários é uma operação comum ao gerenciar configurações, mesclar dados de APIs ou consolidar parâmetros em scripts Python. A partir do Python 3.9, a linguagem introduziu o operador de união de dicionários (
|), permitindo fazer essa fusão em uma única linha de forma limpa e intuitiva. Para versões anteriores, o desempacotamento com o operador de duplo asterisco (**) oferece a mesma praticidade com total compatibilidade.Python
# Dados de exemplo: Configurações padrão e sobrescritas do usuário
config_padrao = {"tema": "escuro", "notificacoes": True, "idioma": "pt-br"}
config_usuario = {"notificacoes": False, "idioma": "en-us", "fonte": "Roboto"}
# --- Abordagem 1: Operador de união '|' (Python 3.9+) ---
# Cria um novo dicionário sem alterar os originais
config_final = config_padrao | config_usuario
print("União com '|':", config_final)
# --- Abordagem 2: Desempacotamento de dicionários '**' (Python 3.5+) ---
# Funciona em versões legadas do Python
config_legada = {**config_padrao, **config_usuario}
print("União com '**':", config_legada)
# --- Abordagem 3: Atualização no próprio local com '|=' (Python 3.9+) ---
# Modifica o dicionário original da esquerda sem criar um novo objeto
config_padrao |= config_usuario
print("Atualizado no local com '|=':", config_padrao)
Pontos-chave
- Resolução de Conflitos de Chaves: Em ambas as abordagens, se houver chaves duplicadas entre os dicionários, o valor pertencente ao dicionário à direita (o último a ser processado) prevalecerá e sobrescreverá o anterior.
|vs|=: O operador|gera um novo dicionário na memória mantendo os dois operandos intactos. Já o operador|=atualiza o dicionário da esquerda no próprio local (in-place), alterando a estrutura original.- Preservação de Tipos: O operador
|exige que ambos os operandos sejam instâncias do tipodict(ou subclasses). Para mesclar iteráveis de pares chave-valorgenéricos, o desempacotamento com{**dict1, **dict2}é mais flexível. - Performance: Ambas as soluções de linha única são executadas em nível de linguagem C, sendo significativamente mais rápidas e legíveis do que a execução de laços
formanuais ou chamadas encadeadas ao método.update().

Comentários
Postar um comentário