Как бы вы присвоили словарь, содержащийся в словаре?
>>> outer = {'inner': { 'foo': 'bar' }}
>>> print outer['inner']['foo']
bar
>>> outer['inner']['foo'] = 'baz'
>>> print outer['inner']['foo']
baz
globals()
просто возвращает словарь , в котором хранятся глобальные переменные.Имена переменных являются ключами.Таким образом, вы обращаетесь к нему (и к любым вложенным структурам внутри него) так же, как и к любому другому словарю.
>>> globals()['outer']['spoon'] = 'fork'
>>> print outer['spoon']
'fork'
Если вы находите это непонятным, просто разбейте его на один шаг за раз, используя более промежуточныйпеременные:
>>> g = globals() # fetch the globals() dictionary into g
>>> o = g['outer'] # fetch the outer dictionary from g into o
>>> o['spoon'] = 'fork' # store 'fork' under the key 'spoon' in o
Попытайтесь сделать то же самое «разбив на меньшие шаги» с вашим попытанным синтаксисом, и вы обнаружите, что вы получите:
>>> g = globals() # fetch the globals() dictionary into g
>>> g["b['c']"] = 5 # store 5 under the key "b['c']" in g
Здесь вывставил значение с в словарь с ключом "b['c']"
.Что прекрасно подходит для словаря, поэтому вы не получите никаких ошибок.Но это полная чепуха, сопоставленная с переменными.
То, что вы сделали, соответствует созданию переменной с именем b['c']
.Не переменная с именем b
, относящаяся к словарю с ключом 'c'
.Нет никакого способа обратиться к этой переменной, не пройдя globals()
, потому что это недопустимый идентификатор Python.Каждый раз, когда вы пытаетесь записать его, Python будет интерпретировать его как ссылку на ключ внутри переменной с именем b
.