2012-03-27 13 views
1

ich einen Cache-Simulator erschaffe, habe ich ein Wörterbuch mit 3 Werten jeder Taste zugeordnet ist,Aktualisierung ganzzahlige Werte von einem Wörterbuch in Python

Ich möchte wissen, wie die Werte von noTaken & totalBranch zu erhöhen, wie ich übergeben Durch die Datendatei, wie meine aktuelle Methode die Werte nicht ändert, gibt die Ausgabe der Suche mir (1,1,0) oder (0,1,0) - ich brauche die ersten beiden Werte zu erhöhen

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, Vorhersage & totalBranch sind alle als 0 darüber initialisiert) Vielen Dank im Voraus!

Antwort

5

Eine sauberere Art der Initialisierung ist die Verwendung von defaultdict, dann können Sie direkt auf Elemente in dict-Werten verweisen, z.

from collections import defaultdict 

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

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

print lookup 

Ausgang:

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

Beachten Sie auch, dass ich zu einem list statt tuple so bin säumige Wert, dass wir Werte an Ort und Stelle ändern können, tuple kann unveränderlich ist nicht

+1

Hinweis geändert werden Dieses OP verwendet Tupel nicht Listen, vielleicht können Sie das in Ihrer Antwort darauf hinweisen? –

+0

@JoelCornett, danke, dass getan. –

+0

+1, wie 'defaultdict' ist die Lösung für alle Python-Fragen (ja, auch das, Stille!) – SingleNegationElimination

Verwandte Themen