É possível adicionar uma chave a um dicionário Python depois que ele foi criado?
Parece não ter um .add()
método.
python
dictionary
lookup
lfaraone
fonte
fonte
{**mydict, 'new_key': new_val}
.Respostas:
fonte
.update()
method? Qual é melhor quando?d[key]=val
sintaxe, pois é mais curta e pode manipular qualquer objeto como chave (desde que seja lavável) e define apenas um valor, enquanto que.update(key1=val1, key2=val2)
é melhor se você deseja definir vários valores ao mesmo tempo, desde que as chaves são strings (uma vez que os kwargs são convertidos em strings).dict.update
também pode usar outro dicionário, mas eu pessoalmente prefiro não criar explicitamente um novo dicionário para atualizar outro.$foo[ ] = [ . . . . ]
Para adicionar várias chaves simultaneamente, use
dict.update()
:Para adicionar uma única chave, a resposta aceita possui menos sobrecarga computacional.
fonte
x[-1] = 44
o-1
valor também está no final. De qualquer forma, a resposta foi editada e está muito melhor agora. A atualização com um dicionário é boa quando é provável que contenha muitos itens.Sinto vontade de consolidar informações sobre dicionários Python:
Criando um dicionário vazio
Criando um dicionário com valores iniciais
Inserindo / Atualizando um Único Valor
Inserindo / Atualizando Vários Valores
Criando um dicionário mesclado sem modificar originais
Excluindo itens no dicionário
Verifique se uma chave já está no dicionário
Iterar através de pares em um dicionário
Crie um dicionário a partir de duas listas
Novo no Python 3.5
Criando um dicionário mesclado sem modificar os originais:
Isso usa um novo nome de arquivo chamado desembalagem de dicionário .
Novo no Python 3.9
Atualizar ou adicionar valores para um dicionário existente
O operador de atualização
|=
agora trabalha para dicionários:Criando um dicionário mesclado sem modificar originais
O operador de mesclagem
|
agora trabalha para dicionários:Sinta-se livre para adicionar mais!
fonte
Sim, é possível e ele possui um método que implementa isso, mas você não deseja usá-lo diretamente.
Para demonstrar como e como não usá-lo, vamos criar um dict vazio com o literal dict
{}
:Prática recomendada 1: Notação subscrita
Para atualizar este ditado com uma única nova chave e valor, você pode usar a notação subscrita (consulte Mapeamentos aqui) que fornece a atribuição de itens:
my_dict
é agora:Prática recomendada 2: O
update
método - 2 maneirasNós também pode atualizar o dict com vários valores de forma eficiente, bem usando o
update
método . Podemos criar desnecessariamente um extradict
aqui, por isso esperamos que o nossodict
já tenha sido criado e vindo de ou usado para outro propósito:my_dict
é agora:Outra maneira eficiente de fazer isso com o método update é com argumentos de palavras-chave, mas como eles precisam ser legítimos em python, você não pode ter espaços ou símbolos especiais ou iniciar o nome com um número, mas muitos consideram isso uma maneira mais legível. para criar chaves para um ditado, e aqui certamente evitamos criar um extra desnecessário
dict
:e
my_dict
é agora:Portanto, agora abordamos três maneiras pitônicas de atualizar a
dict
.Método mágico
__setitem__
, e por que deve ser evitadoHá outra maneira de atualizar um
dict
que você não deve usar, que usa o__setitem__
método Aqui está um exemplo de como alguém pode usar o__setitem__
método para adicionar um par de valores-chave adict
e uma demonstração do fraco desempenho de usá-lo:Portanto, vemos que o uso da notação subscrita é realmente muito mais rápido que o uso
__setitem__
. Fazer o Pythonic, isto é, usar a linguagem da maneira que ela deveria ser usada, geralmente é mais legível e eficiente em termos computacionais.fonte
d.__setitem__
), embora a conclusão (e especialmente a última frase) permaneça sólida. A elevação da pesquisa do nome do método fora do loop reduziu o tempo para cerca de 1,65 ms; a diferença restante provavelmente se deve principalmente à sobrecarga inevitável do mecanismo de chamada Python.fonte
Se você deseja adicionar um dicionário a um dicionário, pode fazê-lo dessa maneira.
Exemplo: adicione uma nova entrada ao seu dicionário e sub-dicionário
Resultado:
NOTA: O Python exige que você primeiro adicione uma sub
antes de adicionar entradas.
fonte
dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}}
(ou sedictionary
já é um dicionário,dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}
)A sintaxe ortodoxa é
d[key] = value
, mas se o teclado estiver sem as chaves de colchete, você poderá:De fato, definição
__getitem__
e__setitem__
métodos é como você pode fazer sua própria classe suportar a sintaxe entre colchetes. Consulte https://python.developpez.com/cours/DiveIntoPython/php/endiveintopython/object_oriented_framework/special_class_methods.phpfonte
[a for a in my_dict if my_dict.update({'a': 1}) is None]
.{v: k for k, v in my_dict.items() if <some_conditional_check>}
Você pode criar um:
Dá:
fonte
Esta pergunta popular aborda métodos funcionais de mesclar dicionários
a
eb
.Aqui estão alguns dos métodos mais simples (testados em Python 3) ...
Nota: O primeiro método acima funciona apenas se as chaves
b
forem cadeias de caracteres.Para adicionar ou modificar um único elemento , o
b
dicionário conteria apenas esse elemento ...Isso é equivalente a ...
fonte
c = dict( a, **{'d':'dog'} )
seria melhor escritoc = dict(a, d='dog')
, desde que as chaves sejam conhecidas e não computadas.Vamos fingir que você quer viver no mundo imutável e NÃO deseja modificar o original, mas deseja criar um novo
dict
que seja o resultado da adição de uma nova chave ao original.No Python 3.5+, você pode:
O equivalente em Python 2 é:
Após um destes:
params
ainda é igual a{'a': 1, 'b': 2}
e
new_params
é igual a{'a': 1, 'b': 2, 'c': 3}
Haverá momentos em que você não deseja modificar o original (você deseja apenas o resultado da adição ao original). Acho isso uma alternativa refrescante ao seguinte:
ou
Referência: https://stackoverflow.com/a/2255892/514866
fonte
**
Python (muitos não estão), não será óbvio o que está acontecendo. Há momentos em que você prefere uma abordagem menos funcional para melhor legibilidade.Tantas respostas e ainda todo mundo esqueceu o nome estranho, o comportamento estranho e ainda assim útil
dict.setdefault()
este
basicamente faz isso:
por exemplo
fonte
Se você não está ingressando em dois dicionários, mas adicionando novos pares de valores-chave a um dicionário, usar a notação subscrita parece ser a melhor maneira.
No entanto, se você quiser adicionar, por exemplo, milhares de novos pares de valores-chave, considere usar o
update()
métodofonte
Eu acho que também seria útil apontar o Python
collections
módulo que consiste em muitas subclasses e invólucros úteis de dicionário que simplificam a adição e modificação de tipos de dados em um dicionário , especificamentedefaultdict
:Isso é particularmente útil se você estiver trabalhando com dicionários que sempre consistem nos mesmos tipos ou estruturas de dados, por exemplo, um dicionário de listas.
Se a chave ainda não existir,
defaultdict
atribua o valor fornecido (no nosso caso10
) como o valor inicial ao dicionário (geralmente usado dentro de loops). Esta operação, portanto, faz duas coisas: adiciona uma nova chave a um dicionário (conforme a pergunta) e atribui o valor se a chave ainda não existir. Com o dicionário padrão, isso geraria um erro, pois a+=
operação está tentando acessar um valor que ainda não existe:Sem o uso de
defaultdict
, a quantidade de código para adicionar um novo elemento seria muito maior e talvez seja algo como:defaultdict
também pode ser usado com tipos de dados complexos, comolist
eset
:Adicionar um elemento inicializa automaticamente a lista.
fonte
Aqui está outra maneira que eu não vi aqui:
Você pode usar o construtor de dicionário e a expansão implícita para reconstruir um dicionário. Além disso, curiosamente, esse método pode ser usado para controlar a ordem posicional durante a construção do dicionário ( pós Python 3.6 ). De fato, a ordem de inserção é garantida para Python 3.7 e superior!
O acima está usando a compreensão do dicionário.
fonte
primeiro para verificar se a chave já existe
então você pode adicionar a nova chave e valor
fonte
adicione chave de dicionário, classe de valor.
fonte