2015-06-15 2 views
0
grammar = { 
'expert' : { 
'min_time' : 30, 
'filtered_thresholds' : {'A':10,'B':10,'C':10,'D':10,'E':20,'I':10,'T':10,'H':10,'K':0,'J':0,'L':0,'M':0,'N':0,'O':0,'P':0,'Q':0,'R':0,'S':0}, 
'filter_screens' : ['H','I','J','K','L','M','N','O','P','Q','R','S'] 
}, 

'expert2' : { 
'min_time' : 2, 
'filtered thresholds' : {'A':10,'B':10,'C':10,'D':10,'E':20,'I':10,'T':10,'H':10,'K':0,'J':0,'L':0,'M':0,'N':0,'O':0,'P':0,'Q':0,'R':0,'S':0}, 
'filter screens' : ['H','I','J','K','L','M','N','O','P','Q','R','S'] 
} 
} 
for i in grammar: 
    for j in grammar[i]: 
     min_time = j['min_time'] 
     filtered_thresholds_expert = j['filtered_thresholds'] 
     filtered_screens = j['filtered_screens'] 
     ProcessThresholds(time_per_screen_percentage) 

Я хочу назначить «min_time» в min_time «filtered_thresholds» в filtered_thresholds_expert и «filtered_screens» в filtered_screens.
Я же получаю эту ошибку
Назначают ключ словаря на другой переменной

min_time = j['min_time']
TypeError: string indices must be integers, not str

ответ

1

Вам не нужен внутренний контур.

for i in grammar: 
    j = grammar[i] 
    min_time = j['min_time'] 
    filtered_thresholds_expert = j['filtered_thresholds'] 
    filtered_screens = j['filtered_screens'] 
    ProcessThresholds(time_per_screen_percentage) 

И вы можете дополнительно полировать его

for key, j in grammar.iteritems(): 
    ... 
1

Вам не нужен вложенный цикл там. Вы заканчиваете итерацию по клавишам ваших внутренних словарей, поэтому, когда вы добираетесь до строки ошибки, j - это просто строка 'min_time', а не запись этого словаря. Я немного исправил ваш код, чтобы он не смешивал пробелы и подчеркивания в ваших ключах. Посмотрите, работает ли это для вас.

grammar = { 
'expert' : { 
'min_time' : 30, 
'filtered_thresholds' : {'A':10,'B':10,'C':10,'D':10,'E':20,'I':10,'T':10,'H':10,'K':0,'J':0,'L':0,'M':0,'N':0,'O':0,'P':0,'Q':0,'R':0,'S':0}, 
'filter_screens' : ['H','I','J','K','L','M','N','O','P','Q','R','S'] 
}, 

'expert2' : { 
'min_time' : 2, 
'filtered_thresholds' : {'A':10,'B':10,'C':10,'D':10,'E':20,'I':10,'T':10,'H':10,'K':0,'J':0,'L':0,'M':0,'N':0,'O':0,'P':0,'Q':0,'R':0,'S':0}, 
'filter_screens' : ['H','I','J','K','L','M','N','O','P','Q','R','S'] 
} 
} 
for i in grammar: 
    j = grammar[i] 
    min_time = j['min_time'] 
    filtered_thresholds_expert = j['filtered_thresholds'] 
    filtered_screens = j['filter_screens'] 
    ProcessThresholds(time_per_screen_percentage) 
1

У вас есть несколько проблем:

не

Во-первых, нет никаких видимых причин, почему grammar является словарем: вы итерацию его, но никогда не индексируйте его ключом, поэтому он может быть списком. Во-вторых, вам нужен только один цикл. Попробуйте следующее:

grammar = [ 
{ 
'min_time' : 30, 
'filtered_thresholds' : {'A':10,'B':10,'C':10,'D':10,'E':20,'I':10,'T':10,'H':10,'K':0,'J':0,'L':0,'M':0,'N':0,'O':0,'P':0,'Q':0,'R':0,'S':0}, 
'filter_screens' : ['H','I','J','K','L','M','N','O','P','Q','R','S'] 
}, 

{ 
'min_time' : 2, 
'filtered thresholds' : {'A':10,'B':10,'C':10,'D':10,'E':20,'I':10,'T':10,'H':10,'K':0,'J':0,'L':0,'M':0,'N':0,'O':0,'P':0,'Q':0,'R':0,'S':0}, 
'filter screens' : ['H','I','J','K','L','M','N','O','P','Q','R','S'] 
} 
] 

for i in grammar: 
    min_time = i['min_time'] 
    filtered_thresholds_expert = i['filtered_thresholds'] 
    filtered_screens = i['filter_screens'] 
    ProcessThresholds(time_per_screen_percentage) 
Смежные вопросы