Преимущества использования методов распаковки для обновления словаря - PullRequest
0 голосов
/ 09 апреля 2019

Я запутался, если есть реальное преимущество обновления ключа словаря с помощью kwargs. Следуйте примеру ниже:

def example():
    return {'a':1,'b':2,'c':3}

Использование kwargs для обновления dict:

   {**example(),'b':9}
>> {'a': 1, 'b': 9, 'c': 3}

Я также мог бы использовать что-то вроде:

example['b'] = 9

Может кто-нибудь сказать мне, в чем заключается преимущество использования метода unpack для обновления dict или указать какие-либо материалы для чтения по этому поводу? Особенно, когда речь идет о вложенном дикте, потому что именно здесь я видел, как его используют.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

{**example(),'b':9} создает новый dict, распаковывая dict, возвращенный example(), а затем обновляя новый dict ключом b, в то время как example['b'] = 9 обновляет ключ b dict example in-место и не создает новый диктант.

0 голосов
/ 09 апреля 2019

Я думаю, вы путаете ** методы распаковки с параметром функции **kwargs. ** просто распаковывает ваш словарь, возвращенный example(), в пары ключ / значение, а затем создает новый словарь с дополнительной парой ключ / значение 'b':9, которую вы передаете в конструктор словаря.

Если вы просто добавляете одну пару ключ / значение за раз, тогда этот метод не будет иметь слишком большого значения, чем просто присваивает его как example['b'] = 9, но если вы хотите объединить два словаря вместе в один словарь, то было бы гораздо эффективнее сделать это new_dict = {**old_dict, **old_dict1}, затем выполнить цикл и добавить каждую пару ключ / значение из обоих словарей в новый словарь. Этот метод работает только для Python 3.5 и выше, для более ранних версий используйте old_dict.update(old_dict2). Вот еще чтение о методах распаковки питонов, а также о kwargs.

...