2013-07-31 3 views
3

У меня есть список, например list = ['foo', 'bar', 'baz'], и я запускаю for-loop над элементами. каждый раз, когда я это делаю, я хотел бы создать словарь, названный после элемента списка, который в настоящее время зацикливается. НапримерИменование словарей после элементов списка

for element in list: 
    ('%s' + '_' + 'dict') % element = {} 

, который, конечно, не работает, дает мне ошибку:

SyntaxError: can't assign to operator 

Есть идеи?

ответ

6

Хотя можно использовать eval или создавать новые записи в словаре globals(), это почти наверняка плохая идея. Вместо этого, используйте ваши имена словарей в качестве ключей в другой словарь явно:

names = ['foo', 'bar', 'baz'] 

d = {} 
for name in names: 
    d[name] = {} 

Вы также можете использовать Dict понимание (или выражение генератора в dict конструктора, если вы находитесь в более ранней версии Python, что Безразлично» t допускать диктовку):

d = {name: {} for name in names} 
# d = dict((name, {}) for name in names) # generator expression version for pre-2.7 
+0

Изменение «dictals locals» не работает. Если вы не находитесь в глобальной области действия, Python фактически не сохраняет там свои локальные переменные, и изменения не будут видны. – user2357112

+0

@ user2357112: Спасибо, что указали это. Я обновил ответ, чтобы правильно ссылаться на вещи, которые на самом деле будут работать (хотя они все равно будут плохими идеями). – Blckknght

+0

@Blckknght: есть ли какие-либо причины не использовать понимание dict? Это кажется намного более чистым, чем ваш другой пример, поэтому просто любопытно, будет ли когда-нибудь причина не использовать понимание dict – user139014

6

Вы можете сделать это с помощью dict. Как:

 
context = {} 
for element in list: 
    context['%s_dict' % element] = {} 

После этого, вы можете использовать контекст [ «foo_dict»], чтобы получить доступ к словарям, которые вы создали.