Питання Додати нові ключі до словника?


Чи можна додати ключ до словника Python після його створення? Це, здається, не має .add() метод


1908
2018-06-21 22:07


походження




Відповіді:


>>> d = {'key':'value'}
>>> print(d)
{'key': 'value'}
>>> d['mynewkey'] = 'mynewvalue'
>>> print(d)
{'mynewkey': 'mynewvalue', 'key': 'value'}

2526
2018-06-21 22:09



@DeepaMG Код дуже простий. Він використовує документований спосіб оголосити ключ словника / пару значень. - Bruno9779
Пояснення полягає в тому, що ви створили нову клавішу \ value pair на словнику, призначивши значення для цього ключа. Якщо ключ не існує, він додається і вказує на це значення. Якщо він існує, то поточне значення, яке він вказує, перезаписано. - R. Navega


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

>>> x.update({3:4})
>>> print x
{1: 2, 3: 4}

850
2017-07-22 14:48



це настільки неефективно, щоб створити словник для оновлення однієї клавіші. Зробіть це лише в тому випадку, якщо у вас більше ніж 1 ключ (може бути порог, вище якого краще створити дикт) - Jean-François Fabre


Я відчуваю себе консолідацією інформації про словники 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))

Не соромтеся додати ще!


590
2017-12-05 06:07





Так, це досить легко. Просто виконайте наступне:

dict["key"] = "value"

133
2018-06-21 22:09





"Чи можна додати ключ до словника Python після його створення? Здається, що не має методу .add ()".

Так, це можливо, і у нього є метод, який реалізує це, але ви не хочете використовувати його безпосередньо.

Щоб продемонструвати, як і як не користуватися ним, давайте створимо порожній дикт з літеральним dict {}:

my_dict = {}

Найкраща практика 1: позначення підказок

Щоб оновити цей дікт за допомогою єдиного нового ключа та значення, ви можете використовувати позначення підзаписів (див. Приклади тут) що передбачає присвоєння елемента:

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

my_dict зараз:

{'new key': 'new value'}

Краща практика 2: The 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'}

Отже, тепер ми розглянули три шляхи оновлення Pythonic dict.


Магічний метод, __setitem__, і чому його слід уникати

Інший спосіб оновлення a dict що ви не повинні використовувати, який використовує __setitem__ метод Ось приклад того, як можна використовувати __setitem__ метод додати пару ключ-значення до a 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, тобто використання мови в тому вигляді, як він мав бути використаний, як правило, є більш читабельним та обчислювальним.


105
2017-11-29 23:57





dictionary[key] = value

73
2018-06-21 22:08



Вануань: швидкість не є єдиною вимогою для правильної відповіді. Надзвичайно важливий рівень деталізації. - naught101


Якщо ви хочете додати словник у словник, ви можете зробити це таким чином.

Приклад: додайте нову записку до свого словника та словник

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 вимагає, щоб ви вперше додали підпункт

dictionary["dictionary_within_a_dictionary"] = {}

перед додаванням записів.


44
2018-04-26 19:04



це так само не стосується питання, яке задано, як більшість коментарів у сторінках керівництва php.net ... - Erik Allik
Нічого, щоб зупинити це робити на одному рядку: dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}} (або якщо dictionary вже є дикт dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}) - Chris


Правовірним синтаксисом є d[key] = value, але якщо у вашій клавіатурі відсутні клавіші з квадратними дужками, які ви могли б зробити:

d.__setitem__(key, value)

Насправді, визначаючи __getitem__ і __setitem__ методи полягають в тому, як ви можете створити власний клас підтримки синтаксису квадратного дужки. Побачити http://www.diveintopython.net/object_oriented_framework/special_class_methods.html


31
2018-04-14 00:58



Я вважаю, що дуже важко програмувати з python без клавіш на моїй клавіатурі. - Bobort
Або більшість мов програмування при роботі з масивами ... - Shadow
Це було єдиним способом, яким я міг знайти, щоб встановити словникові значення в рамках розуміння списку. Дякую - chris stevens