Дополнительно
Добавьте новые ключи в словарь?
Можно ли добавить ключ в словарь Python после его создания? Кажется, у него нет метода .add ()
.
2405
14
Чтобы добавить несколько ключей одновременно:
Для добавления одного ключа принятый ответ имеет меньше вычислительных накладных расходов.
Мне хочется обобщить информацию о словарях Python:
Создание пустого словаря
Создание словаря с начальными значениями
Вставка / Обновление одного значения
Вставка / Обновление нескольких значений
Создание объединенного словаря без изменения оригиналов
Удаление элементов в словаре
Проверьте, есть ли ключ в словаре
Итерация через пары в словаре
Создать словарь из 2 списков
Новое в Python3
Создание объединенного словаря без изменения оригиналов
Не стесняйтесь добавлять больше!
Да, это возможно, и у него есть метод, который реализует это, но вы не хотите использовать его напрямую.
Чтобы продемонстрировать, как и как его не использовать, давайте создадим пустой дикт с буквальным диктовкой
{{{}}}
:Лучшая практика 1: Обозначение подписчика
Чтобы обновить этот dict одним новым ключом и значением, вы можете использовать обозначение индекса (см. Здесь сопоставления), которое предусматривает назначение элемента:
my_dict
сейчас:Лучшая практика 2: метод
update
- 2 способаМы также можем эффективно обновлять dict несколькими значениями, используя метод
update
. Возможно, мы излишне создаем здесь дополнительный «дикт», поэтому мы надеемся, что наш «дикт» уже создан и пришел или использовался для другой цели:my_dict
сейчас:Другой эффективный способ сделать это с помощью метода обновления - с аргументами ключевых слов, но так как они должны быть законными словами питона, Вы можете 'не иметь пробелов или специальных символов или начинать имя с номера, но многие считают это более читабельным способом создания ключей для диктовки, и здесь мы, безусловно, избегаем создания дополнительного ненужного
dict
:и
my_dict
сейчас:Итак, теперь мы рассмотрели три питонских способа обновления «дикта».
Магический метод,
__setitem__
, и почему его следует избегатьЕсть еще один способ обновления
dict
, который вы не должны использовать, который использует метод__setitem__
. Вот пример того, как можно использовать метод__setitem__
, чтобы добавить пару ключ-значение вdict
, и демонстрация плохой производительности его использования:Таким образом, мы видим, что использование обозначения индекса на самом деле намного быстрее, чем использование
__setitem__
. Выполнение пифонического языка, то есть использование языка так, как он предназначался для использования, обычно является одновременно более читабельным и вычислительно эффективным.Если вы хотите добавить словарь в словарь, вы можете сделать это таким образом.
Пример: добавьте новую запись в свой словарь & суб словарь
Выход:
ПРИМЕЧАНИЕ: Python требует, чтобы вы сначала добавили саб
перед добавлением записей.
Одоксальный синтаксис:
d [key] = value
, но если на вашей клавиатуре отсутствуют клавиши квадратной скобки, вы можете сделать:Фактически, определение методов
__getitem__
и__setitem__
- это то, как вы можете заставить свой собственный класс поддерживать синтаксис квадратной скобки. См. https://python.developpez.com/cours/DiveIntoPython/php/endiveintopython/object_rogent_framework/special_class_methods.phpВы можете создать один:
Дает:
Этот популярный вопрос касается функциональных методов слияния словарей
a
иb
.Вот некоторые из более простых методов (проверено в Python 3)...
b
являются строками.*Чтобы добавить или изменить один элемент , словарь
b
будет содержать только этот один элемент...Это эквивалентно...
Давайте представим, что вы хотите жить в неизменном мире и НЕ хотите изменять оригинал, но хотите создать новый «дикт», который является результатом добавления нового ключа к оригиналу.
В Python 3.5+ вы можете сделать:
Эквивалент Python 2:
После любого из них:
params
по-прежнему равен{'a': 1, 'b': 2}
а также
new_params
равно{'a': 1, 'b': 2, 'c': 3}
Будут времена, когда вы не хотите изменять оригинал (вы хотите только результат добавления к оригиналу). Я считаю это освежающей альтернативой следующему:
или
Ссылка: https://stackoverflow.com/a/2255892/514866
Так много ответов, и все же все забыли о странно названном, странно ведущем себя, и все же все еще удобном
dict.setdefault ()
Эта
в основном просто делает это:
например.
Если вы не присоединяетесь к двум словарям, но добавляете новые пары ключ-значение в словарь, то использование обозначения индекса кажется лучшим способом.
Однако, если вы хотите добавить, например, тысячи новых пар ключ-значение, вам следует рассмотреть возможность использования метода
update ()
.Я думаю, что было бы также полезно указать модуль Python
collections
, который состоит из множества полезных подклассов и оболочек словаря, которые упрощают добавление и изменение типов данных в словаре , в частностиdefaultdict
:Это особенно полезно, если вы работаете со словарями, которые всегда состоят из одних и тех же типов данных или структур, например, со словарем списков.
Если ключ еще не существует,
defaultdict
назначает заданное значение (в нашем случае10
) в качестве исходного значения словарю (часто используется внутри циклов). Следовательно, эта операция выполняет две вещи: она добавляет новый ключ к словарю (согласно вопросу), и назначает значение, если ключ еще не существует. В стандартном словаре это вызвало бы ошибку, поскольку операция+ =
пытается получить доступ к значению, которое еще не существует:Без использования
defaultdict
количество кода для добавления нового элемента было бы намного больше и, возможно, выглядит примерно так:defaultdict
также можно использовать со сложными типами данных, такими какlist
иset
:Добавление элемента автоматически инициализирует список.
сначала проверить, существует ли ключ
тогда вы можете добавить новый ключ и значение