Ajouter de nouvelles clés d'un dictionnaire?

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

1987
demandé sur martineau 2009-06-22 02:07:39
la source

19 ответов

>>> d = {'key':'value'}
>>> print(d)
{'key': 'value'}
>>> d['mynewkey'] = 'mynewvalue'
>>> print(d)
{'mynewkey': 'mynewvalue', 'key': 'value'}
2610
répondu Paolo Bergantino 2017-09-27 16:59:13
la source
>>> x = {1:2}
>>> print x
{1: 2}

>>> x.update({3:4})
>>> print x
{1: 2, 3: 4}
864
répondu 2009-07-22 18:48:17
la source

j'ai envie de consolider les informations sur les dictionnaires Python:

la Création d'un dictionnaire vide

data = {}
# OR
data = dict()

création d'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))}

insertion/mise à jour d'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 valeurs multiples

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

la Création d'une fusion de dictionnaire sans modifier les originaux

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

Supprimer des é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 à travers des 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 à ajouter plus!

635
répondu Yugal Jindle 2018-05-11 22:28:30
la source

Oui, c'est assez facile. Il suffit de faire ce qui suit:

dict["key"] = "value"
136
répondu John Slavick 2009-06-22 02:09:09
la source

"Est-il possible d'ajouter une touche à 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 possède 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 un dict vide avec le dict littéral, {} :

my_dict = {}

Meilleure Pratique 1: Indice

pour mettre à jour ce dict avec une seule nouvelle clé et une nouvelle valeur, vous pouvez utiliser la notation en indice (voir Mappings ici) qui prévoit pour l'assignation d'article:

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

my_dict est maintenant:

{'new key': 'new value'}

Meilleure Pratique 2: Le update méthode - 2 voies

nous pouvons également mettre à jour le dict avec plusieurs valeurs efficacement aussi bien en utilisant le update méthode . Nous pouvons créer inutilement un dict Supplémentaire ici, donc nous espérons que notre dict a déjà été créé et est venu de ou a été utilisé dans un autre but:

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 façon efficace de faire cela avec la méthode update 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 symboles spéciaux ou démarrer le nom avec un nombre, mais beaucoup considèrent que c'est une façon plus lisible de créer des clés pour un dict, et ici nous évitons certainement de créer un dict inutile:

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'}

donc maintenant nous avons couvert trois façons Pythoniques de mettre à jour un dict .


méthode Magique, __setitem__ , et pourquoi il devrait être évité

il y a une autre façon de mettre à jour un dict que vous ne devriez pas utiliser, qui utilise la méthode __setitem__ . Voici un exemple de la façon d'utiliser la méthode __setitem__ pour ajouter une paire de clés à une 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 en indice est en fait beaucoup plus rapide que l'utilisation de __setitem__ . Faire la chose pythonique, c'est-à-dire, utiliser le le langage utilisé est généralement plus facile à lire et plus efficace sur le plan informatique.

106
répondu Aaron Hall 2016-06-17 14:28:41
la source
dictionary[key] = value
73
répondu Jason Creighton 2009-06-22 02:08:57
la source

Si vous souhaitez 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'}}}

NOTE: Python nécessite que vous devez d'abord ajouter un sous

dictionary["dictionary_within_a_dictionary"] = {}

avant l'ajout des rubriques.

44
répondu htmlfarmer 2017-11-10 23:38:16
la source

la syntaxe orthodoxe est d[key] = value , mais si votre clavier manque les touches carrées vous pouvez faire:

d.__setitem__(key, value)

en fait, définir __getitem__ et __setitem__ méthodes est la façon dont vous pouvez faire votre propre classe soutenir la syntaxe des crochets. Voir http://www.diveintopython.net/object_oriented_framework/special_class_methods.html

31
répondu Colonel Panic 2014-09-15 12:56:57
la source

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
répondu octoback 2013-05-25 17:33:35
la source

Cette question populaire adresses fonctionnelle 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 b sont des chaînes.

pour ajouter ou modifier un l'élément , le dictionnaire b ne contiendrait qu'un seul élément...

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

cela équivaut à...

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

c = functional_dict_add( a, 'd', 'dog' )
25
répondu nobar 2017-05-23 14:55:01
la source
data = {}
data['a'] = 'A'
data['b'] = 'B'

for key, value in data.iteritems():
    print "%s-%s" % (key, value)

résultats dans

a-A
b-B
15
répondu daydreamer 2011-12-05 10:26:24
la source

C'est exactement comme ça que je le ferais: # données fixes avec sapce

data = {}
data['f'] = 'F'
data['c'] = 'C'

for key, value in data.iteritems():
    print "%s-%s" % (key, value)

ça me va. Profitez-en!

9
répondu waldens 2015-05-30 04:54:25
la source

imaginons que vous voulez vivre dans l'immuable monde et ne souhaitez PAS modifier l'original, mais souhaitez créer un nouveau dict qui est le résultat de l'ajout d'une nouvelle clé à l'original.

en Python 3.5+ vous pouvez faire:

params = {'a': 1, 'b': 2}
new_params = {**params, **{'c': 3}}

l'équivalent Python 2 est:

params = {'a': 1, 'b': 2}
new_params = dict(params, **{'c': 3})

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 voulez pas modifier l'original (vous voulez seulement le résultat de l'ajout de l'original). je trouve cela une alternative rafraîchissante à ce qui suit:

params = {'a': 1, 'b': 2}
new_params = params.copy()
new_params['c'] = 3

ou

params = {'a': 1, 'b': 2}
new_params = params.copy()
new_params.update({'c': 3})

référence: https://stackoverflow.com/a/2255892/514866

9
répondu campeterson 2018-01-12 22:31:53
la source

nous pouvons ajouter de nouvelles clés au dictionnaire de cette façon:

Dictionary_Name[New_Key_Name] = New_Key_Value

Voici l'exemple:

# This is my dictionary
my_dict = {'Key1': 'Value1', 'Key2': 'Value2'}
# Now add new key in my dictionary
my_dict['key3'] = 'Value3'
# Print updated dictionary
print my_dict

sortie:

{'key3': 'Value3', 'Key2': 'Value2', 'Key1': 'Value1'}
8
répondu Rajiv Sharma 2016-06-21 06:39:57
la source

tant de réponses et tout le monde a oublié le nom étrange, se comporte bizarrement, et pourtant toujours pratique dict.setdefault()

Ce

value = my_dict.setdefault(key, default)

fait simplement ceci:

try:
    value = my_dict[key]
except KeyError: # key not found
    value = my_dict[key] = default

p.ex.

>>> mydict = {'a':1, 'b':2, 'c':3}
>>> mydict.setdefault('d', 4)
4 # returns new value at mydict['d']
>>> print(mydict)
{'a':1, 'b':2, 'c':3, 'd':4} # a new key/value pair was indeed added
# but see what happens when trying it on an existing key...
>>> mydict.setdefault('a', 111)
1 # old value was returned
>>> print(mydict)
{'a':1, 'b':2, 'c':3, 'd':4} # existing key was ignored
6
répondu Michael Ekoka 2017-10-23 17:03:24
la source

il a une méthode de mise à jour que vous pouvez utiliser comme ceci:

dict.update({"key" : "value"})

4
répondu Aman Jain 2017-02-23 20:31:01
la source

essentiellement deux façons simples avec lesquelles vous pouvez ajouter une nouvelle clé dans le dict

dict_input = {'one': 1, 'two': 2, 'three': 3}

#1. Set a new value
dict_input['four'] = 4

#2. or use the update() function
dict_input.update({'five': 5})
4
répondu Vishvajit Pathak 2017-11-08 12:35:49
la source

je le ferais comme ça. Attention à la partie directory[name]=number .

n = int(raw_input())
directory={}
entry={}
# store the values as if they appear in the stdin
for i in xrange(n):
    name, number = raw_input().split()
    directory[name]=number

#  query the values    
while (True):
    queryname = (str) (raw_input())
    try:
        strdisp = queryname + "=" + directory[queryname]
        print strdisp
    except:
      print 'Not found'
0
répondu issam 2018-03-29 13:01:29
la source

utiliser l'opérateur d'assignation d'indice:

d['x'] = "value"

N'oubliez pas que la clé de Python peut par n'importe quoi hashable ce qui signifie bool , int , string même un tuple ou n'importe quel objet hashable.

-1
répondu nehemiah 2017-11-07 23:23:53
la source

Autres questions sur python dictionary