2013-04-30 2 views
0

Вот результат я хотел:Как создать несколько словарей на основе вложенных циклов?

level1 = {'value1':0, 'value2':0, 'value3':0} 
level2 = {'value1':0, 'value2':0, 'value3':0} 
level3 = {'value1':0, 'value2':0, 'value3':0} 
level3 = {'value1':0, 'value2':0, 'value3':0} 

Примечание: Значение1, значение2, и Value3 все то же самое. Я использую это, чтобы просто заполнить словари.

Вот что я пытаюсь:

for x in range (1,6): 
    level = 'level%d' % x 
    for iteration in range(1, 4): 
     value = 'value%d' % iteration 
    level = {} 
     level['value'] = 0 

ответ

1

Вы пытаетесь что-то вроде этого ?:

dic={} 
for x in range (1,6): 
    level = 'level%d' % x 
    dic[level] = {} 
    for iteration in range(1, 4): 
     value = 'value%d' % iteration 
     dic[level][value] = 0 

print dic 

Выход:

{'level1': {'value1': 0, 'value2': 0, 'value3': 0}, 
'level2': {'value1': 0, 'value2': 0, 'value3': 0}, 
'level3': {'value1': 0, 'value2': 0, 'value3': 0}, 
'level4': {'value1': 0, 'value2': 0, 'value3': 0}, 
'level5': {'value1': 0, 'value2': 0, 'value3': 0}} 
+1

В зависимости от потребностей он может быть упрощен дополнительно с использованием разрешения по умолчанию или dict. Кроме того, 'str.format' предпочитается над'% 'для нового кода. – Antimony

+0

Я не знаком с вложенными словарями. Как мне получить доступ к значению1 словаря level3? –

+1

Используйте 'print dic ['level3'] ['value1']' – hek2mgl

1

Так что вы хотите что-то вроде:

keys = ('value1','value2','value3') 
{k:dict.fromkeys(keys,0) for k in range(1,4)} 

демо:

>>> keys = ('value1','value2','value3') 
>>> {k:dict.fromkeys(keys,0) for k in range(1,4)} 
{1: {'value3': 0, 'value2': 0, 'value1': 0}, 2: {'value3': 0, 'value2': 0, 'value1': 0}, 3: {'value3': 0, 'value2': 0, 'value1': 0}} 

Конечно, с последовательными целыми числами в качестве ключей, вы можете рассмотреть возможность индексации от 0 и используя список понимание вместо:

[dict.fromkeys(keys,0) for _ in range(3)] 
+0

Выглядит неплохо, но может быть беспорядочным, если есть более 3 или 5 уровней;) – hek2mgl

+0

спасибо, как бы я обращался к Level4 ['value3']? –

+0

@hevnsnt - Я не уверен, что я следую. Что вы имеете в виду? – mgilson

1

Вы можете вложить в for петли в вложенным dictionary comprehension и создать два уровня вложенного словаря, как это:

from pprint import pprint 

nested_dict = {'level%d' % level: 
        {'value%d' % value: 0 for value in range(1, 4)} 
               for level in range(1, 6)} 
pprint(nested_dict) 

Выход:

{'level1': {'value1': 0, 'value2': 0, 'value3': 0}, 
'level2': {'value1': 0, 'value2': 0, 'value3': 0}, 
'level3': {'value1': 0, 'value2': 0, 'value3': 0}, 
'level4': {'value1': 0, 'value2': 0, 'value3': 0}, 
'level5': {'value1': 0, 'value2': 0, 'value3': 0}} 
Смежные вопросы