Вставка значений в словарь без создания ссылки - PullRequest
0 голосов
/ 03 января 2011

есть способ вставить словарь в другой словарь, не создавая ссылку на словарь.e.g

dict_a = {}
dict_b = {}
dict_a.insert(key, value)

это предотвратит проблемы с

dict_a["somekey"] = dict_b

Ответы [ 5 ]

4 голосов
/ 04 января 2011

Вы можете использовать copy.deepcopy для b:

>>> a = {'a':[1,2,3]}
>>> b = {'b':[4,5,6]}
>>> a['c'] = copy.deepcopy(b)
>>> a
{'a': [1, 2, 3], 'c': {'b': [4, 5, 6]}}
>>> b
{'b': [4, 5, 6]}
>>> b['b'].append(7)
>>> b
{'b': [4, 5, 6, 7]}
>>> a
{'a': [1, 2, 3], 'c': {'b': [4, 5, 6]}}

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

2 голосов
/ 03 января 2011

Да.

 dict_a.update(dict_b)

Это вставит все ключи / значения из dict_b в dict_a (примечание: это на месте и возвращает None)

1 голос
/ 04 января 2011

РЕДАКТИРОВАТЬ: этот ответ лучше. Вы должны использовать copy.deepcopy, иначе вы получите ссылки на объекты, хранящиеся в словаре, который нужно скопировать в скопированном словаре.

Оригинальный ответ ниже:

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

dict_a["somekey"] = dict_b.copy()

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

1 голос
/ 03 января 2011

Я думаю, что вы имеете в виду обновление?

>>> dict_a = {1: 'a'}
>>> dict_b = {2: 'b'}
>>> dict_a.update(dict_b)
>>> dict_a
{1: 'a', 2: 'b'}

Или вы хотите сказать, что вам нужна копия?

>>> from copy import copy
>>> dict_a = {1: 'a'}
>>> dict_b = {2: 'b'}
>>> dict_a['dict'] = copy(dict_b)
>>> dict_a
{1: 'a', 'dict': {2: 'b'}}
1 голос
/ 03 января 2011

Вам необходимо сделать копию:

dict_a["dsomekey"] = dict_b.copy()

Редактировать : Нет словарного метода, который вставляет значение по значению. Словари Python всегда используют ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...