Это мой словарь:Как назначить глобальные переменные из словаря?
vimvar = {'startline' : [ 'startline' , 'int(vim.eval("s:StartLine"))' ],
'startline-1' : [ 'startline' , 'int(vim.eval("s:StartLine"))-1'],
'endline' : [ 'endline' , 'int(vim.eval("s:EndLine"))' ],
'gcase' : [ 'gCASE' , 'vim.eval("g:CASE")' ],
'akeyw' : [ 'akeyw' , 'vim.eval("a:keyw")' ]
}
Это мой контрольный список:
importlist = ['startline', 'gcase', 'akeyw']
То, что я хочу сделать, это проверить, если значение в importlist
присутствует в качестве ключа в словаре vimvar
.
Если да, чем:
Значение 1-го поля в подсписка (связанный с ключом) должна быть новой глобальной переменной.
Значение второго поля в подсписке (связанное с ключом) должно быть выполнено. Он импортирует переменную из моего текстового редактора vim.
Я создал этот код, чтобы понять выше:
for n in importlist:
for key,val in vimvar.items():
if n in vimvar:
exec('global ' + vimvar[key][0])
exec(vimvar[val][0] + '=vimvar[val][1]')
Но все, что я делаю это дает ошибку
undefined variable 'sa'
undefined variable 'gCASE', unhashable type list
и т.д.
Что я сделал не так?
У вас есть строки ошибок, указанных в сообщениях об ошибках? – nbro
Вы ошиблись, присваивая глобальные значения 'exec'. У вас есть непревзойденная причина для этого? – TigerhawkT3
Одна большая проблема: проблема в том, что в вашей петле слишком много петли. Вы проверяете, если 'n' в словаре, а затем использовать _current_ словарь итерацию, что приводит к DEF для п в importlist: если п в vimvar: Exec («глобальный»+ vimvar [п] [0]) exec ('='. Join (vimvar [n])) –