Обновление целочисленных значений словаря в python - PullRequest
1 голос
/ 28 марта 2012

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

Я хочу знать, как увеличивать значения 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 выше этого) Заранее спасибо!

1 Ответ

5 голосов
/ 28 марта 2012

Более чистый способ инициализации - использовать 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

output:

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

Также обратите внимание, что по умолчанию используется значение list вместо tuple, чтобы мы могли изменять значения на месте, поскольку неизменность tuple не может быть изменена

...