2012-03-27 2 views
1

Я создаю симулятор кэша, у меня есть словарь с 3 значений, связанных с каждым ключом,Обновления целочисленных значений словаря в Python

Я хочу знать, как приращение значения noTaken & totalBranch, как я прохожу через файл данных, так как мой текущий метод не меняет значения, результат поиска дает мне (1,1,0) или (0,1,0) - мне нужны первые два значения для увеличения

for line in datafile.readlines(): 
    items = line.split(' ') 
    instruction = items[1] 
    if lookup.has_key(instruction): 
     if (taken == 1): 
      lookup[instruction] = (noTaken + 1, totalBranch + 1, prediction) 
     else: 
      lookup[instruction] = (noTaken, totalBranch + 1, prediction) 
    else: 
     if (taken == 1): 
      lookup[instruction] = (1, 1, prediction) 
     else: 
      lookup[instruction] = (0, 1, prediction) 

(noTaken, предсказание & totalBranch все инициализировано как 0 над этим) Заранее спасибо!

ответ

5

Более чистый способ инициализации - использовать defaultdict, а затем вы можете напрямую ссылаться на элементы в значениях dict, например.

from collections import defaultdict 

lookup = defaultdict(lambda: [0,0,0]) 

lookup['a'][0] += 1 
lookup['b'][1] += 1 
lookup['a'][0] += 1 

print lookup 

выход:

{'a': [2, 0, 0], 'b': [0, 1, 0]} 

отметить также, что я недобросовестный значение вместо этого list из tuple так, что мы можем изменить значение в месте, tuple быть неизменно не может быть изменен

+1

Примечания что OP использует кортежи, а не списки, может быть, вы можете указать это в своем ответе? –

+0

@JoelCornett, спасибо, что. –

+0

+1, поскольку 'defaultdict' является решением всех вопросов python (да, даже тот, тише!) – SingleNegationElimination

Смежные вопросы