При создании нового ключа словаря в Python есть ли преимущества для его создания с помощью `update`, а не просто =? - PullRequest
0 голосов
/ 30 июня 2018

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

self.profiles[server.id][author.id]['games']['accounts']['league'] уже существует. Есть ли какая-либо выгода или цель использования

self.profiles[server.id][author.id]['games']['accounts']['league'].update({'plays': true})

над

self.profiles[server.id][author.id]['games']['accounts']['league']['plays'] = True

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Использование .update с изменением только одной клавиши будет значительно менее эффективным.

Простой тест на моем рабочем столе

$ python -m timeit -s 'd={}' 'd.update({"x":3})'
1000000 loops, best of 3: 0.263 usec per loop
$ python -m timeit -s 'd={}' 'd["x"]=3'
10000000 loops, best of 3: 0.0409 usec per loop

Это связано с тем, что для обновления ключа с помощью .update требуется создать новый словарь, а затем выполнить итерацию по всем ключам в словаре (даже если есть только один). Плюс всегда есть накладные расходы с вызовами функций в Python.

0 голосов
/ 30 июня 2018

В вашем случае нет, использование синтаксиса заданного элемента является предпочтительным.

Но если у вас есть несколько пар, которые вы хотите добавить в dict, вот где обновление светит:

d = {'a':1, 'b':2}

new_pairs = {'c':3, 'd':4}

d.update(new_pairs)  

print(d)   # d = {'a':1, 'b':2, 'c':3, 'd':4}

Это также изменит значения для клавиш, которые одновременно указаны в d и new_pairs (на значение new_pairs[k]):

d = {'a':1, 'b':"before"}

new_pairs = {'b':"after", 'c':3, 'd':4}

d.update(new_pairs)

print(d)  # {'a': 1, 'b': 'after', 'c': 3, 'd': 4}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...