Question Ajouter de nouvelles clés à un dictionnaire?


Est-il possible d'ajouter une clé à un dictionnaire Python après sa création? Il ne semble pas avoir de .add() méthode.


1904
2018-06-21 22:07


origine


Réponses:


>>> d = {'key':'value'}
>>> print(d)
{'key': 'value'}
>>> d['mynewkey'] = 'mynewvalue'
>>> print(d)
{'mynewkey': 'mynewvalue', 'key': 'value'}

2510
2018-06-21 22:09



>>> x = {1:2}
>>> print x
{1: 2}

>>> x.update({3:4})
>>> print x
{1: 2, 3: 4}

850
2017-07-22 14:48



J'ai envie de consolider les infos sur les dictionnaires Python:

Créer un dictionnaire vide

data = {}
# OR
data = dict()

Créer un dictionnaire avec des valeurs initiales

data = {'a':1,'b':2,'c':3}
# OR
data = dict(a=1, b=2, c=3)
# OR
data = {k: v for k, v in (('a', 1),('b',2),('c',3))}

Insérer / mettre à jour une seule valeur

data['a']=1  # Updates if 'a' exists, else adds 'a'
# OR
data.update({'a':1})
# OR
data.update(dict(a=1))
# OR
data.update(a=1)

Insertion / Mise à jour de plusieurs valeurs

data.update({'c':3,'d':4})  # Updates 'c' and adds 'd'

Création d'un dictionnaire fusionné sans modification des originaux

data3 = {}
data3.update(data)  # Modifies data3, not data
data3.update(data2)  # Modifies data3, not data2

Suppression d'éléments dans le dictionnaire

del data[key]  # Removes specific element in a dictionary
data.pop(key)  # Removes the key & returns the value
data.clear()  # Clears entire dictionary

Vérifier si une clé est déjà dans le dictionnaire

key in data

Itérer par paires dans un dictionnaire

for key in data: # Iterates just through the keys, ignoring the values
for key, value in d.items(): # Iterates through the pairs
for key in d.keys(): # Iterates just through key, ignoring the values
for value in d.values(): # Iterates just through value, ignoring the keys

Créer un dictionnaire à partir de 2 listes

data = dict(zip(list_with_keys, list_with_values))

N'hésitez pas à en ajouter d'autres!


583
2017-12-05 06:07



Oui, c'est plutôt facile. Fais juste ce qui suit:

dict["key"] = "value"

132
2018-06-21 22:09



"Est-il possible d'ajouter une clé à un dictionnaire Python après qu'il a été créé? Il ne semble pas avoir une méthode .add ()."

Oui c'est possible, et il y a une méthode qui implémente cela, mais vous ne voulez pas l'utiliser directement.

Pour montrer comment et comment ne pas l'utiliser, créons une dict vide avec le littéral dict, {}:

my_dict = {}

Meilleure pratique 1: notation d'indice

Pour mettre à jour cette dict avec une seule nouvelle clé et valeur, vous pouvez utiliser la notation de l'indice (voir Mappages ici) qui fournit l'assignation d'objet:

my_dict['new key'] = 'new value'

my_dict est maintenant:

{'new key': 'new value'}

Meilleure pratique 2: La update méthode - 2 façons

Nous pouvons également mettre à jour la dict avec de multiples valeurs efficacement en utilisant la update méthode. Nous créons peut-être inutilement un supplément dict ici, donc nous espérons que notre dict a déjà été créé et provient ou a été utilisé à d'autres fins:

my_dict.update({'key 2': 'value 2', 'key 3': 'value 3'})

my_dict est maintenant:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value'}

Une autre manière efficace de le faire avec la méthode de mise à jour est avec des arguments, 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 avec un nombre, pour créer des clés pour un dict, et ici, nous évitons certainement de créer un inutile supplémentaire dict:

my_dict.update(foo='bar', foo2='baz')

et my_dict est maintenant:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value', 
 'foo': 'bar', 'foo2': 'baz'}

Alors maintenant, nous avons couvert trois façons Pythonic de mettre à jour un dict.


Méthode magique, __setitem__, et pourquoi cela devrait être évité

Il y a une autre façon de mettre à jour un dict que vous ne devriez pas utiliser, qui utilise le __setitem__ méthode. Voici un exemple de la façon dont on pourrait utiliser le __setitem__ méthode pour ajouter une paire clé-valeur à un dict, et une démonstration de la mauvaise performance de l'utiliser:

>>> d = {}
>>> d.__setitem__('foo', 'bar')
>>> d
{'foo': 'bar'}


>>> def f():
...     d = {}
...     for i in xrange(100):
...         d['foo'] = i
... 
>>> def g():
...     d = {}
...     for i in xrange(100):
...         d.__setitem__('foo', i)
... 
>>> import timeit
>>> number = 100
>>> min(timeit.repeat(f, number=number))
0.0020880699157714844
>>> min(timeit.repeat(g, number=number))
0.005071878433227539

Nous voyons donc que l'utilisation de la notation indice est en réalité beaucoup plus rapide que l'utilisation __setitem__. Faire le truc de Pythonic, c'est-à-dire utiliser le langage de la façon dont il était destiné à être utilisé, est généralement à la fois plus lisible et efficace sur le plan des calculs.


105
2017-11-29 23:57



dictionary[key] = value

73
2018-06-21 22:08



Si vous voulez ajouter un dictionnaire dans un dictionnaire, vous pouvez le faire de cette façon.

Exemple: Ajouter une nouvelle entrée à votre dictionnaire et sous-dictionnaire

dictionary = {}
dictionary["new key"] = "some new entry" # add new dictionary entry
dictionary["dictionary_within_a_dictionary"] = {} # this is required by python
dictionary["dictionary_within_a_dictionary"]["sub_dict"] = {"other" : "dictionary"}
print (dictionary)

Sortie:

{'new key': 'some new entry', 'dictionary_within_a_dictionary': {'sub_dict': {'other': 'dictionarly'}}}

REMARQUE: Python nécessite que vous ajoutez d'abord un sous

dictionary["dictionary_within_a_dictionary"] = {}

avant d'ajouter des entrées.


44
2018-04-26 19:04



La syntaxe orthodoxe est d[key] = value, mais si votre clavier manque les touches de crochet que vous pourriez faire:

d.__setitem__(key, value)

En fait, définir __getitem__ et __setitem__ méthodes est comment vous pouvez faire votre propre classe soutenir la syntaxe du carré. Voir http://www.diveintopython.net/object_oriented_framework/special_class_methods.html


31
2018-04-14 00:58



vous pouvez en créer un

class myDict(dict):

    def __init__(self):
        self = dict()

    def add(self, key, value):
        self[key] = value

## example

myd = myDict()
myd.add('apples',6)
myd.add('bananas',3)
print(myd)

donne

>>> 
{'apples': 6, 'bananas': 3}

25
2018-05-25 13:33



Cette question populaire adresses fonctionnel méthodes de fusion des dictionnaires a et b.

Voici quelques-unes des méthodes les plus simples (testées en Python 3) ...

c = dict( a, **b ) ## see also https://stackoverflow.com/q/2255878
c = dict( list(a.items()) + list(b.items()) )
c = dict( i for d in [a,b] for i in d.items() )

Note: La première méthode ci-dessus ne fonctionne que si les touches de b sont des chaînes.

Pour ajouter ou modifier un seul élément, la b dictionnaire ne contiendrait que cet élément ...

c = dict( a, **{'d':'dog'} ) ## returns a dictionary based on 'a'

Ceci est équivalent à ...

def functional_dict_add( dictionary, key, value ):
   temp = dictionary.copy()
   temp[key] = value
   return temp

c = functional_dict_add( a, 'd', 'dog' )

25
2017-08-17 23:04