Можно ли добавить ключ в словарь Python после его создания?
Кажется, у него нет .add()
метода.
python
dictionary
lookup
lfaraone
источник
источник
{**mydict, 'new_key': new_val}
.Ответы:
источник
.update()
методом? Что лучше, когда?d[key]=val
синтаксис, так как он короче и может обрабатывать любой объект как ключ (если он может быть хешируемым), и устанавливает только одно значение, тогда как.update(key1=val1, key2=val2)
лучше, если вы хотите установить несколько значений одновременно, если ключи являются строками (так как kwargs преобразуются в строки).dict.update
Можно также взять другой словарь, но я лично предпочитаю не создавать явно новый словарь, чтобы обновить другой.$foo[ ] = [ . . . . ]
Чтобы добавить несколько ключей одновременно, используйте
dict.update()
:Для добавления одного ключа принятый ответ имеет меньше вычислительных затрат.
источник
x[-1] = 44
в-1
стоимости, в конце концов , тоже. В любом случае ответ был отредактирован и теперь стал намного лучше. Обновление со словарем хорошо, когда есть вероятность, что оно содержит много элементов.Я чувствую, что собираю информацию о словарях Python:
Создание пустого словаря
Создание словаря с начальными значениями
Вставка / Обновление одного значения
Вставка / Обновление нескольких значений
Создание объединенного словаря без изменения оригиналов
Удаление элементов в словаре
Проверьте, есть ли ключ в словаре
Итерация по парам в словаре
Создать словарь из двух списков
Новое в Python 3.5
Создание объединенного словаря без изменения оригиналов:
При этом используется новая функция, называемая распаковка словаря .
Новое в Python 3.9
Обновить или добавить значения для существующего словаря
Оператор обновления
|=
теперь работает для словарей:Создание объединенного словаря без изменения оригиналов
Оператор слияния
|
теперь работает для словарей:Не стесняйтесь добавлять больше!
источник
Да, это возможно, и у него есть метод, который реализует это, но вы не хотите использовать его напрямую.
Чтобы продемонстрировать, как и как его не использовать, давайте создадим пустой dict с литералом dict
{}
:Лучшая практика 1: индексная запись
Чтобы обновить этот dict с помощью одного нового ключа и значения, вы можете использовать запись индекса (см. Здесь «Сопоставления»), которая предусматривает назначение элемента:
my_dict
сейчас:Лучшая практика 2:
update
метод - 2 способаМы можем также обновить Dict с несколькими значениями эффективно, а также с использованием в
update
методе . Возможно, мы излишне создаемdict
здесь дополнительные элементы, поэтому мы надеемся, что нашиdict
уже были созданы, получены или использовались для других целей:my_dict
сейчас:Другой эффективный способ сделать это с помощью метода update - использовать аргументы с ключевыми словами, но, поскольку они должны быть допустимыми словами Python, вы не можете иметь пробелы или специальные символы или начинать имя с цифры, но многие считают это более читабельным способом. чтобы создать ключи для dict, и здесь мы, конечно, избегаем создания лишних ненужных
dict
:и
my_dict
сейчас:Итак, теперь мы рассмотрели три Pythonic способы обновления
dict
.Волшебный метод,
__setitem__
и почему его следует избегатьЕсть другой способ обновления,
dict
который вы не должны использовать, который использует__setitem__
метод. Вот пример того, как можно использовать__setitem__
метод для добавления пары ключ-значение в adict
, и демонстрация низкой производительности его использования:Таким образом, мы видим, что использование индексной записи на самом деле намного быстрее, чем использование
__setitem__
. Выполнение Pythonic, то есть использование языка так, как это было задумано, обычно более читабельно и вычислительно эффективно.источник
d.__setitem__
), хотя заключение (и особенно последнее предложение) остается обоснованным. Вывод имени метода из цикла сократил время примерно до 1,65 мс; оставшееся различие, вероятно, в значительной степени связано с неизбежными издержками механизма вызовов Python.источник
Если вы хотите добавить словарь в словарь, вы можете сделать это следующим образом.
Пример: добавление новой записи в ваш словарь и под словарь
Вывод:
ПРИМЕЧАНИЕ: Python требует, чтобы вы сначала добавили подпункт
перед добавлением записей.
источник
dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}}
(или, еслиdictionary
это уже диктатdictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}
)Ортодоксальный синтаксис есть
d[key] = value
, но если на вашей клавиатуре отсутствуют клавиши в квадратных скобках, вы можете сделать следующее:Фактически, определение
__getitem__
и__setitem__
методы - это то, как вы можете заставить свой собственный класс поддерживать синтаксис в квадратных скобках. См. Https://python.developpez.com/cours/DiveIntoPython/php/endiveintopython/object_oriented_framework/special_class_methods.phpисточник
[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>}
Вы можете создать один:
дает:
источник
Этот популярный вопрос касается функциональных методов слияния словарей
a
и дрb
.Вот некоторые из наиболее простых методов (протестированных в Python 3) ...
Примечание. Первый метод, описанный выше, работает только в том случае, если ключи
b
являются строками.Чтобы добавить или изменить один элемент ,
b
словарь должен содержать только этот один элемент ...Это эквивалентно ...
источник
c = dict( a, **{'d':'dog'} )
было бы лучше написать какc = dict(a, d='dog')
, пока ключи известны и не вычислены.Давайте представим, что вы хотите жить в неизменном мире и НЕ хотите изменять оригинал, но хотите создать новый,
dict
который является результатом добавления нового ключа к оригиналу.В Python 3.5+ вы можете сделать:
Эквивалент Python 2:
После любого из них:
params
все еще равно{'a': 1, 'b': 2}
а также
new_params
равно{'a': 1, 'b': 2, 'c': 3}
Будут времена, когда вы не захотите изменять оригинал (вам нужен только результат добавления оригинала). Я считаю это отличной альтернативой следующему:
или
Ссылка: https://stackoverflow.com/a/2255892/514866
источник
**
Python (многие не знакомы ), то не будет очевидно, что происходит. Временами вы предпочитаете менее функциональный подход для лучшей читабельности.Так много ответов, и все еще забыли о странных именах, странно вели себя, и все же все еще пригодились
dict.setdefault()
Эта
в основном просто делает это:
например
источник
Если вы не объединяете два словаря, а добавляете новые пары ключ-значение в словарь, то использование записи нижнего индекса кажется наилучшим способом.
Однако, если вы хотите добавить, например, тысячи новых пар ключ-значение, вам следует рассмотреть возможность использования этого
update()
метода.источник
Я думаю, что было бы также полезно указать
collections
модуль Python, который состоит из множества полезных подклассов словаря и оболочек, которые упрощают добавление и модификацию типов данных в словаре , в частностиdefaultdict
:Это особенно полезно, если вы работаете со словарями, которые всегда состоят из одних и тех же типов данных или структур, например словаря списков.
Если ключ еще не существует,
defaultdict
присваивает данное значение (в нашем случае10
) в качестве начального значения словарю (часто используется внутри циклов). Следовательно, эта операция выполняет две вещи: она добавляет новый ключ в словарь (согласно вопросу) и присваивает значение, если ключ еще не существует. Со стандартным словарем это вызвало бы ошибку, так как+=
операция пытается получить доступ к значению, которое еще не существует:Без использования
defaultdict
объем кода для добавления нового элемента был бы намного больше и, возможно, выглядит примерно так:defaultdict
также может использоваться со сложными типами данных, такими какlist
иset
:Добавление элемента автоматически инициализирует список.
источник
Вот еще один способ, который я не видел здесь:
Вы можете использовать конструктор словаря и неявное расширение, чтобы восстановить словарь. Более того, интересно, что этот метод может использоваться для управления позиционным порядком при построении словаря ( пост Python 3.6 ). На самом деле, порядок вставки гарантирован для Python 3.7 и выше!
Выше используется словарное понимание.
источник
сначала проверить, существует ли ключ
Затем вы можете добавить новый ключ и значение
источник
добавить ключ словаря, значение класса.
источник