在python中更新字典的整数值

ECH*_*ECH 1 python dictionary simulator

我正在创建一个缓存模拟器,我有一个字典,其中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)
Run Code Online (Sandbox Code Playgroud)

(没有,预测和totalBranch都在此之上初始化为0)在此先感谢!

Anu*_*yal 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
Run Code Online (Sandbox Code Playgroud)

输出:

{'a': [2, 0, 0], 'b': [0, 1, 0]}
Run Code Online (Sandbox Code Playgroud)

另请注意,我将值默认为a list而不是tuple使我们可以修改值到位,tuple不可修改是不可变的