Est-il possible d'ajouter une clé à un dictionnaire Python après sa création?
Il ne semble pas avoir de .add()
méthode.
python
dictionary
lookup
lfaraone
la source
la source
{**mydict, 'new_key': new_val}
.Réponses:
la source
.update()
méthode? Quel est le meilleur moment?d[key]=val
syntaxe car elle est plus courte et peut gérer n'importe quel objet comme clé (tant qu'elle est hachable), et ne définit qu'une seule valeur, alors que.update(key1=val1, key2=val2)
c'est plus agréable si vous souhaitez définir plusieurs valeurs en même temps, tant que les clés sont des chaînes (puisque les kwargs sont convertis en chaînes).dict.update
peut également prendre un autre dictionnaire, mais je préfère personnellement ne pas créer explicitement un nouveau dictionnaire afin d'en mettre à jour un autre.$foo[ ] = [ . . . . ]
Pour ajouter plusieurs clés simultanément, utilisez
dict.update()
:Pour ajouter une seule clé, la réponse acceptée a moins de temps de calcul.
la source
x[-1] = 44
la-1
valeur est également à la fin. Quoi qu'il en soit, la réponse a été modifiée et est bien meilleure maintenant. La mise à jour avec un dictionnaire est bonne lorsqu'il est probable qu'elle contient de nombreux éléments.J'ai envie de consolider les informations sur les dictionnaires Python:
Création d'un dictionnaire vide
Création d'un dictionnaire avec des valeurs initiales
Insertion / mise à jour d'une valeur unique
Insertion / mise à jour de plusieurs valeurs
Créer un dictionnaire fusionné sans modifier les originaux
Suppression d'éléments dans le dictionnaire
Vérifiez si une clé est déjà dans le dictionnaire
Itérer à travers des paires dans un dictionnaire
Créez un dictionnaire à partir de deux listes
Nouveau dans Python 3.5
Créer un dictionnaire fusionné sans modifier les originaux:
Cela utilise une nouvelle valeur appelée décompression de dictionnaire .
Nouveau dans Python 3.9
Mettre à jour ou ajouter des valeurs pour un dictionnaire existant
L' opérateur de mise à jour
|=
fonctionne désormais pour les dictionnaires:Créer un dictionnaire fusionné sans modifier les originaux
L' opérateur de fusion
|
fonctionne désormais pour les dictionnaires:N'hésitez pas à en ajouter plus!
la source
Oui, c'est possible, et il a une méthode qui l'implémente, mais vous ne voulez pas l'utiliser directement.
Pour montrer comment et comment ne pas l'utiliser, créons un dict vide avec le littéral dict
{}
:Meilleure pratique 1: notation en indice
Pour mettre à jour ce dict avec une seule nouvelle clé et valeur, vous pouvez utiliser la notation en indice (voir Mappages ici) qui prévoit l'affectation des éléments:
my_dict
est maintenant:Meilleure pratique 2: La
update
méthode - 2 façonsNous pouvons également mettre à jour le dict avec plusieurs valeurs efficacement en utilisant la
update
méthode . Nous pouvons créer inutilement un supplémentdict
ici, nous espérons donc que notredict
a déjà été créé et provient ou a été utilisé à une autre fin:my_dict
est maintenant:Une autre façon efficace de le faire avec la méthode de mise à jour est avec les arguments de mots clés, mais comme ils doivent être des mots python légitimes, vous ne pouvez pas avoir d'espaces ou de symboles spéciaux ou commencer le nom par un nombre, mais beaucoup considèrent cela comme un moyen plus lisible pour créer des clés pour un dict, et ici nous évitons certainement de créer un extra inutile
dict
:et
my_dict
c'est maintenant:Alors maintenant, nous avons couvert trois façons Pythoniques de mettre à jour a
dict
.Méthode magique
__setitem__
, et pourquoi il faut l'éviterIl existe une autre façon de mettre à jour un
dict
que vous ne devriez pas utiliser, qui utilise la__setitem__
méthode. Voici un exemple de la façon dont on pourrait utiliser la__setitem__
méthode pour ajouter une paire clé-valeur à adict
, et une démonstration des mauvaises performances de son utilisation:Nous voyons donc que l'utilisation de la notation en indice est en réalité beaucoup plus rapide que l'utilisation
__setitem__
. Faire la chose Pythonic, c'est-à-dire utiliser le langage de la façon dont il était censé être utilisé, est généralement à la fois plus lisible et plus efficace en termes de calcul.la source
d.__setitem__
), bien que la conclusion (et surtout la dernière phrase) reste solide. Hisser la recherche de nom de méthode hors de la boucle a réduit le temps à environ 1,65 ms; la différence restante est probablement due en grande partie à la surcharge inévitable du mécanisme d'appel Python.la source
Si vous souhaitez ajouter un dictionnaire dans un dictionnaire, vous pouvez le faire de cette façon.
Exemple: ajoutez une nouvelle entrée à votre dictionnaire et sous-dictionnaire
Production:
REMARQUE: Python nécessite que vous ajoutiez d'abord un sous
avant d'ajouter des entrées.
la source
dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}}
(ou sidictionary
c'est déjà un dict,dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}
)La syntaxe orthodoxe est
d[key] = value
, mais si votre clavier ne contient pas les touches du crochet, vous pouvez le faire:En fait, définir
__getitem__
et__setitem__
méthodes est la façon dont vous pouvez faire en sorte que votre propre classe prenne en charge la syntaxe entre crochets. Voir https://python.developpez.com/cours/DiveIntoPython/php/endiveintopython/object_oriented_framework/special_class_methods.phpla source
[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>}
Vous pouvez en créer un:
Donne:
la source
Cette question populaire porte sur les méthodes fonctionnelles de fusion des dictionnaires
a
et desb
.Voici quelques-unes des méthodes les plus simples (testées en Python 3) ...
Remarque: La première méthode ci-dessus ne fonctionne que si les clés
b
sont des chaînes.Pour ajouter ou modifier un seul élément , le
b
dictionnaire ne contiendrait qu'un seul élément ...Cela équivaut à ...
la source
c = dict( a, **{'d':'dog'} )
serait mieux écrit tantc = dict(a, d='dog')
que les clés sont connues et non calculées.Imaginons que vous vouliez vivre dans le monde immuable et que vous ne vouliez PAS modifier l'original mais que vous vouliez en créer un nouveau
dict
qui résulte de l'ajout d'une nouvelle clé à l'original.Dans Python 3.5+, vous pouvez faire:
L'équivalent Python 2 est:
Après l'un ou l'autre:
params
est toujours égal à{'a': 1, 'b': 2}
et
new_params
est égal à{'a': 1, 'b': 2, 'c': 3}
Il y aura des moments où vous ne voudrez pas modifier l'original (vous voulez seulement le résultat de l'ajout à l'original). Je trouve cela une alternative rafraîchissante aux suivantes:
ou
Référence: https://stackoverflow.com/a/2255892/514866
la source
**
Python (beaucoup ne le sont pas), ce ne sera pas évident. Il y a des moments où vous privilégiez une approche moins fonctionnelle pour une meilleure lisibilité.Tant de réponses et tout le monde a oublié le nom étrange, le comportement étrange et pourtant toujours pratique
dict.setdefault()
Cette
fait simplement ceci:
par exemple
la source
Si vous ne joignez pas deux dictionnaires, mais que vous ajoutez de nouvelles paires clé-valeur à un dictionnaire, l'utilisation de la notation en indice semble être la meilleure façon.
Cependant, si vous souhaitez ajouter, par exemple, des milliers de nouvelles paires valeur / clé, vous devriez envisager d'utiliser la
update()
méthode.la source
Je pense qu'il serait également utile de souligner le
collections
module de Python qui se compose de nombreuses sous-classes et wrappers de dictionnaire utiles qui simplifient l' ajout et la modification des types de données dans un dictionnaire , en particulierdefaultdict
:Cela est particulièrement utile si vous travaillez avec des dictionnaires qui sont toujours constitués des mêmes types de données ou structures, par exemple un dictionnaire de listes.
Si la clé n'existe pas encore,
defaultdict
affecte la valeur donnée (dans notre cas10
) comme valeur initiale au dictionnaire (souvent utilisée dans les boucles). Cette opération fait donc deux choses: elle ajoute une nouvelle clé à un dictionnaire (selon la question), et affecte la valeur si la clé n'existe pas encore. Avec le dictionnaire standard, cela aurait déclenché une erreur car l'+=
opération tente d'accéder à une valeur qui n'existe pas encore:Sans l'utilisation de
defaultdict
, la quantité de code pour ajouter un nouvel élément serait beaucoup plus grande et ressemblerait peut-être à quelque chose comme:defaultdict
peut également être utilisé avec des types de données complexes tels quelist
etset
:L'ajout d'un élément initialise automatiquement la liste.
la source
Voici une autre façon que je n'ai pas vue ici:
Vous pouvez utiliser le constructeur de dictionnaire et l'expansion implicite pour reconstruire un dictionnaire. De plus, il est intéressant de noter que cette méthode peut être utilisée pour contrôler l'ordre de position lors de la construction du dictionnaire ( post Python 3.6 ). En fait, l'ordre d'insertion est garanti pour Python 3.7 et supérieur!
Ce qui précède utilise la compréhension du dictionnaire.
la source
vérifier d'abord si la clé existe déjà
alors vous pouvez ajouter la nouvelle clé et la nouvelle valeur
la source
ajouter une clé de dictionnaire, une classe de valeur.
la source