Добавить новые ключи в словарь?

Можно ли добавить ключ в словарь Python после его создания? Кажется, у него нет метода .add() .

вопрос задан 21.06.2009
lfaraone
16460 репутация

19 ответов


  • 2602 рейтинг
    >>> d = {'key':'value'}
    >>> print(d)
    {'key': 'value'}
    >>> d['mynewkey'] = 'mynewvalue'
    >>> print(d)
    {'mynewkey': 'mynewvalue', 'key': 'value'}
    
    ответ дан Paolo Bergantino, с репутацией 366973, 21.06.2009
  • 861 рейтинг
    >>> x = {1:2}
    >>> print x
    {1: 2}
    
    >>> x.update({3:4})
    >>> print x
    {1: 2, 3: 4}
    
    ответ дан does_not_exist, с репутацией , 22.07.2009
  • 629 рейтинг

    Мне нравится консолидировать информацию о словарях Python:

    Создание пустого словаря

     data = {}
    # OR
    data = dict()
     

    Создание словаря с начальными значениями

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

    Вставка /обновление одного значения

     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)
     

    Вставка /обновление нескольких значений

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

    Создание объединенного словаря без изменения оригиналов

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

    Удаление элементов в словаре

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

    Проверьте, что ключ уже находится в словаре

     key in data
     

    Итерации через пары в словаре

     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
     

    Создайте словарь из 2 списков

     data = dict(zip(list_with_keys, list_with_values))
     

    Не стесняйтесь добавлять больше!

    ответ дан Yugal Jindle, с репутацией 21540, 5.12.2011
  • 136 рейтинг

    Да, это довольно легко. Просто выполните следующие действия:

     dict["key"] = "value"
     
    ответ дан John Slavick, с репутацией 6997, 21.06.2009
  • 106 рейтинг

    «Можно ли добавить ключ в словарь Python после его создания? У него нет метода .add ()».

    Да, возможно, и у него есть метод, который реализует это, но вы не хотите использовать его напрямую.

    Чтобы продемонстрировать, как и как не использовать его, давайте создадим пустой dict с тиковым литералом, {} :

     my_dict = {}
     

    Лучшая практика 1: Обозначение подстроки

    Чтобы обновить этот dict с помощью одного нового ключа и значения, вы можете использовать нотацию индекса (см. Здесь Mappings), которая предусматривает назначение элемента:

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

    my_dict теперь:

     {'new key': 'new value'}
     

    Лучшая практика 2: метод update - 2 способа

    Мы также можем также обновить dict с помощью нескольких значений, используя метод update . Мы можем излишне создавать дополнительные dict здесь, поэтому мы надеемся, что наши dict уже созданы и получены или использовались для других целей:

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

    my_dict :

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

    Еще один эффективный способ сделать это с помощью метода обновления - это аргументы ключевого слова, но поскольку они должны быть законными словами python, вы не можете иметь пробелы или специальные символы или начинать имя с номера, но многие считают это более читаемым способом для создания ключей для dict, и здесь мы, конечно, избегаем создания лишних ненужных dict :

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

    и теперь my_dict :

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

    Итак, теперь мы рассмотрели три путинских способа обновления dict .


    Волшебный метод, __setitem__ , и почему его следует избегать

    Есть еще один способ обновления dict который вы не должны использовать, который использует метод __setitem__ . Вот пример того, как можно использовать метод __setitem__ для добавления пары ключ-значение в dict и демонстрацию низкой производительности ее использования:

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

    Таким образом, мы видим, что использование нотной записи на самом деле намного быстрее, чем использование __setitem__ . Выполнение Pythonic, то есть использование языка в том виде, в котором оно предназначалось для использования, обычно является более читабельным и эффективным с точки зрения вычислений.

    ответ дан Aaron Hall, с репутацией 153756, 29.11.2014
  • 73 рейтинг
    dictionary[key] = value
    
    ответ дан Jason Creighton, с репутацией 13152, 21.06.2009
  • 44 рейтинг

    Если вы хотите добавить словарь в словарь, вы можете сделать это таким образом.

    Пример: добавьте новую запись в словарь и дополнительный словарь

     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)
     

    Вывод:

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

    ПРИМЕЧАНИЕ. Python требует, чтобы вы сначала добавили sub

     dictionary["dictionary_within_a_dictionary"] = {}
     

    перед добавлением записей.

    ответ дан htmlfarmer, с репутацией 1435, 26.04.2012
  • 31 рейтинг

    Ортодоксальный синтаксис равен d[key] = value , но если на клавиатуре отсутствуют клавиши квадратной скобки, которые вы могли бы сделать:

     d.__setitem__(key, value)
     

    Фактически, определение методов __getitem__ и __setitem__ заключается в том, как вы можете сделать свой собственный класс поддержкой синтаксиса с квадратной скобкой. См. Http://www.diveintopython.net/object_oriented_framework/special_class_methods.html.

    ответ дан Colonel Panic, с репутацией 77755, 14.04.2013
  • 25 рейтинг

    вы можете создать

     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)
     

    дает

     >>> 
    {'apples': 6, 'bananas': 3}
     
    ответ дан octoback, с репутацией 13234, 25.05.2013
  • 25 рейтинг

    В этом популярном вопросе рассматриваются функциональные методы слияния словарей a и b .

    Вот некоторые из более простых методов (проверенных на 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() )
     

    Примечание. Первый вышеописанный метод работает только в том случае, если клавиши в b являются строками.

    Чтобы добавить или изменить один элемент , словарь b будет содержать только один элемент ...

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

    Это эквивалентно ...

     def functional_dict_add( dictionary, key, value ):
       temp = dictionary.copy()
       temp[key] = value
       return temp
    
    c = functional_dict_add( a, 'd', 'dog' )
     
    ответ дан nobar, с репутацией 23812, 17.08.2013
  • 15 рейтинг
     data = {}
    data['a'] = 'A'
    data['b'] = 'B'
    
    for key, value in data.iteritems():
        print "%s-%s" % (key, value)
     

    приводит к

     a-A
    b-B
     
    ответ дан daydreamer, с репутацией 29300, 5.12.2011
  • 9 рейтинг

    Именно так я бы это сделал: # фиксированные данные с sapce

     data = {}
    data['f'] = 'F'
    data['c'] = 'C'
    
    for key, value in data.iteritems():
        print "%s-%s" % (key, value)
     

    Это работает для меня. Наслаждайтесь!

    ответ дан waldens, с репутацией 101, 30.05.2015
  • 9 рейтинг

    Давайте притворимся, что вы хотите жить в неизменном мире и НЕ хотите изменять оригинал, но хотите создать новый dict который является результатом добавления нового ключа к оригиналу.

    В Python 3.5+ вы можете:

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

    Эквивалент Python 2:

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

    После любого из них:

    params по-прежнему равна {'a': 1, 'b': 2}

    а также

    new_params равно {'a': 1, 'b': 2, 'c': 3}

    Будут моменты, когда вы не хотите изменять оригинал (вам нужен только результат добавления к оригиналу). Я нахожу это освежающей альтернативой следующему:

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

    или

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

    Ссылка: https://stackoverflow.com/a/2255892/514866

    ответ дан campeterson, с репутацией 2001, 12.01.2018
  • 8 рейтинг

    мы можем добавить новые ключи в словарь таким образом:

    Dictionary_Name [New_Key_Name] = New_Key_Value

    Вот пример:

     # 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
     

    Вывод:

     {'key3': 'Value3', 'Key2': 'Value2', 'Key1': 'Value1'}
     
    ответ дан Rajiv Sharma, с репутацией 1776, 21.06.2016
  • 6 рейтинг

    Так много ответов и все еще все забыли о странном названии, странно вели себя, и все же пригодится dict.setdefault()

    Эта

     value = my_dict.setdefault(key, default)
     

    в основном просто делает это:

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

    например

     >>> 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
     
    ответ дан mike_e, с репутацией 8169, 23.10.2017
  • 4 рейтинг

    В основном два простых способа, с помощью которых вы можете добавить новый ключ в 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})
     
    ответ дан Vishvajit Pathak, с репутацией 685, 21.08.2017
  • 4 рейтинг

    Он имеет метод обновления, который вы можете использовать следующим образом:

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

    ответ дан Aman Jain, с репутацией 340, 23.02.2017
  • 0 рейтинг

    Я бы сделал это так. Остерегайтесь 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'
     
    ответ дан issam, с репутацией 40, 29.03.2018
  • -1 рейтинг

    Используйте оператор присваивания индексов:

     d['x'] = "value"
     

    Не забывайте, что ключ Python может быть любым хешируемым, что означает bool , int , string даже кортеж или любые хешируемые объекты.

    ответ дан nehemiah, с репутацией 3597, 25.10.2017