2017-05-06 6 views
-2

Ich möchte Wert im Wörterbuch eines Wörterbuchs erhöhen, gibt es ein großes Wörterbuch 'a', das zwei getrennte Wörterbücher hat: 'be' und 'ce'. Ich möchte Wert der spezifischen Schlüssel erhöhen, durch Variablen wie ‚dist‘ bestimmt und ‚bec‘ aber ich kann den Schlüssel eines der kleineren Wörterbücher nicht erreichen:Python zwei Wörterbücher im Wörterbuch, erhöhen Wert in bestimmten Schlüssel

import collections 
from collections import defaultdict 

a={} 
be = {} 
ce = {} 

for z in range(1,11): 
    be["b_{0}".format(z)] = 0 
    be = collections.OrderedDict(sorted(be.items())) 

for c in range(1,11): 
    for b in range(1,11): 
     ce["c_{0}_{1}".format(c,b)]= 0 
ce = collections.OrderedDict(sorted(ce.items())) 

for x in range(1,10): 
    a["a_{0}".format(x)] = be,ce 
    a = collections.OrderedDict(sorted(a.items())) 

dist = 3 
bec = 10 
a["a_"+str(dist)]["b_"+str(bec)] += 1 

Ich habe versucht, „eine [“ a_“zu drucken + str (dist)] ["b _" + str (bec)] "aber es hat nicht funktioniert, es funktioniert nur, wenn ich nur" a ["a _" + str (dist)] "

+0

Wenn Sie 'a [" a_ "+ str (dist)]' ausdrucken, können Sie sehen, dass es sich um ein Tupel handelt. Das ist das Komma in 'be ce'. Daher muss die Fehlermeldung Tuple-Indizes ganze Zahlen oder Slices sein, nicht str. Wofür soll der Wert sein? –

+0

Ich möchte ganzzahlige Werte für den Schlüssel "b_10" von "a_3", also könnte ich seinen Wert von 0 auf mehr erhöhen, jedes Mal wenn ich es brauche – Asia

+0

Woher kommt 'ce'? Und was sollte der Unterschied zwischen "a [a_1]" und "a [a_2]" sein? –

Antwort

0

Hier ist das einfachste möglich Ansatz:

>>> from collections import Counter 
>>> a = Counter() 
>>> a[(3, 'b', 10)] += 1 
>>> a[(3, 'b', 10)] += 1 
>>> a[(3, 'b', 10)] 
2 
>>> a[(3, 'b', 8)] 
0 

Gibt es eine Möglichkeit, in denen das nicht funktioniert?

+0

Nicht genau, was ich meinte, ich arbeite mit Wörterbüchern: {a_1: {(b_1), (b_2), (c_1_1), (c_1_2)}, a_2 : {(b_1), (b_2), (c_1_1), (c_1_2)}} alle zu Beginn mit 0 gefüllt, also wenn ich 'bec' = 2 und 'dist' = 2 erhält, wird nur a_2 {b_2} erhöht , der Rest sollte alles sein 0 – Asia

+0

So weit, wenn ich versuche, einen zu erhöhen spezifischer Wert von: a ["a _" + str (dist)] ["b _" + str (bec)]) + = 1 es erhöht alle 'a_', so bekomme ich a_1 {b_2}: 1 und a_2 {b_2 }: 1 und die erste sollte sich nicht geändert haben – Asia

+0

@Asia ein Counter ist ein Wörterbuch, und alle Schlüssel beginnen bei 0. –

Verwandte Themen