Обновить словарь внутри словаря без удаления содержимого [дубликат]

Я нашел еще одну проблему, вызвавшую эту проблему, и уже решил ее. Я случайно сохранил свой скрипт в кодировке UTF-16. Похоже, что PHP5 не может распознать тег <?php в 16-битной кодировке по умолчанию.

7
задан eric 25 November 2014 в 05:12
поделиться

4 ответа

Это очень приятное общее решение для работы с вложенными dicts :

import collections
def makehash():
    return collections.defaultdict(makehash)

. Это позволяет устанавливать вложенные ключи на любом уровне:

myDict = makehash()
myDict["myKey"]["nestedDictKey1"] = aValue
myDict["myKey"]["nestedDictKey2"] = anotherValue
myDict["myKey"]["nestedDictKey3"]["furtherNestedDictKey"] = aThirdValue

Для одного уровня вложенности defaultdict можно использовать напрямую:

from collections import defaultdict
myDict = defaultdict(dict)
myDict["myKey"]["nestedDictKey1"] = aValue
myDict["myKey"]["nestedDictKey2"] = anotherValue

И здесь используется только dict:

try:
  myDict["myKey"]["nestedDictKey2"] = anotherValue
except KeyError:
  myDict["myKey"] = {"nestedDictKey2": anotherValue}
9
ответ дан Allen Luce 20 August 2018 в 21:19
поделиться

Вы можете рассматривать вложенный dict как неизменный:

myDict["myKey"] = dict(myDict["myKey"], **{ "nestedDictKey2" : anotherValue })

0
ответ дан Albert James Teddy 20 August 2018 в 21:19
поделиться
myDict["myKey"]["nestedDictKey2"] = anotherValue

myDict["myKey"] возвращает вложенный словарь, к которому мы можем добавить еще один ключ, например, для любого словаря:)

Пример:

>>> d = {'myKey' : {'k1' : 'v1'}}
>>> d['myKey']['k2'] = 'v2'
>>> d
{'myKey': {'k2': 'v2', 'k1': 'v1'}}
0
ответ дан slider 20 August 2018 в 21:19
поделиться

Вы можете использовать collections.defaultdict для этого и просто установить пары ключ-значение внутри вложенного словаря.

from collections import defaultdict
my_dict = defaultdict(dict)
my_dict['myKey']['nestedDictKey1'] = a_value
my_dict['myKey']['nestedDictKey2'] = another_value

В качестве альтернативы вы также можете записать эти последние две строки как

my_dict['myKey'].update({"nestedDictKey1" : a_value })
my_dict['myKey'].update({"nestedDictKey2" : another_value })
5
ответ дан Stuart 20 August 2018 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: