Я нашел еще одну проблему, вызвавшую эту проблему, и уже решил ее. Я случайно сохранил свой скрипт в кодировке UTF-16
. Похоже, что PHP5 не может распознать тег <?php
в 16-битной кодировке по умолчанию.
Это очень приятное общее решение для работы с вложенными 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}
Вы можете рассматривать вложенный dict как неизменный:
myDict["myKey"] = dict(myDict["myKey"], **{ "nestedDictKey2" : anotherValue })
myDict["myKey"]["nestedDictKey2"] = anotherValue
myDict["myKey"]
возвращает вложенный словарь, к которому мы можем добавить еще один ключ, например, для любого словаря:)
Пример:
>>> d = {'myKey' : {'k1' : 'v1'}}
>>> d['myKey']['k2'] = 'v2'
>>> d
{'myKey': {'k2': 'v2', 'k1': 'v1'}}
Вы можете использовать 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 })