Вопрос-Ответ

How can I add new keys to a dictionary?

Как я могу добавить новые ключи в словарь?

Как мне добавить новый ключ в существующий словарь? У него нет .add() метода.

Переведено автоматически
Ответ 1

Вы создаете новую пару ключ / значение в словаре, присваивая значение этому ключу

d = {'key': 'value'}
print(d) # {'key': 'value'}

d['mynewkey'] = 'mynewvalue'

print(d) # {'key': 'value', 'mynewkey': 'mynewvalue'}

Если ключ не существует, он добавляется и указывает на это значение. Если он существует, текущее значение, на которое он указывает, перезаписывается.

Ответ 2

Мне хочется объединить информацию о словарях 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'

Python 3.9+:

Оператор обновления |= теперь работает для словарей:

data |= {'c':3,'d':4}

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

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

Python 3.5+:

При этом используется новая функция, называемая распаковкой словаря.

data = {**data1, **data2, **data3}

Python 3.9+:

Оператор слияния | теперь работает для словарей:

data = data1 | {'c':3,'d':4}

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

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

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

data = dict(zip(list_with_keys, list_with_values))
Ответ 3

Чтобы добавить несколько ключей одновременно, используйте dict.update():

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

>>> d = {3:4, 5:6, 7:8}
>>> x.update(d)
>>> print(x)
{1: 2, 3: 4, 5: 6, 7: 8}

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

Ответ 4

"Возможно ли добавить ключ в словарь Python после того, как он был создан? Похоже, у него нет метода .add()".


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

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

my_dict = {}

Рекомендуемая практика 1: Подстрочная нотация

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

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

Другой эффективный способ сделать это с помощью метода update - использовать аргументы ключевых слов, но поскольку они должны быть правильными словами 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'}

Итак, теперь мы рассмотрели три Pythonic способа обновления 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, то есть использование языка так, как он был задуман, обычно является более читабельным и эффективным с точки зрения вычислений.

2023-04-25 06:11 python dictionary