2015-10-07 1 views
2

Я пытаюсь выяснить, как напечатать список, storeItems, который содержит 3 OrderedDict(), и быть в состоянии напечатать key и value для каждого OrderedDict. Я не знаю, как это решить, и это то, что я пробовал, что дает мне TypeError: string indices must be integers.Python печати ключ dictionarys (OrderedDict) в пределах списка withloop

storeItems = [{}, {}, {}] 
storeItems[0] = OrderedDict() 
storeItems[1] = OrderedDict() 
storeItems[2] = OrderedDict() 

storeItems[0]['Name'] = 'Auto-Enter' 
storeItems[0]['Price'] = 30 
storeItems[0]['Max'] = 100 

storeItems[1]['Name'] = 'Multiplier' 
storeItems[1]['Price'] = 100 
storeItems[1]['Max'] = 5 

storeItems[2]['Name'] = 'Factory' 
storeItems[2]['Price'] = 100 
storeItems[2]['Max'] = 3 

#the original layout of the storeItems 

#storeItems = [{ 
#  "Name": "Auto-Enter", 
#  "Price": 30, 
#  "Max": 100 
# }, { 
#  "Name": "Multiplier", 
#  "Price": 100, 
#  "Max": 5 
# }, { 
#  "Name": "Factory", 
#  "Price": 200, 
#  "Max": 3 
# }] 
i = 0 
for value in storeItems: 
    for key in value: 
     for i in range(0, 2): 
      print(storeItems[i][key], storeItems[i][key][value]) 

вещей отметить

я обнаружил, делая for value in storeItems: print(value) напечатает OrderedDict([('Name': 'Auto-Enter', ...)]) для каждой строки. print(storeItems[0]['Name']) выходы Auto-Enter. Кажется, я пытаюсь сделать это в цикле.

Я предпочитаю, чтобы это сохранить как можно ближе, как вы можете в оригинальном формате storeItems

ответ

2

Каждый элемент storeItems представляет собой словарь (OrderedDict только подкласс, который отслеживает порядок вставки), поэтому просто цикл по dict.items() method

for odict in storeItems: 
    for key, value in odict.items(): 
     print(key, value) 
Смежные вопросы