0

I need to define and use a "3-dimensional" dictionary. I don't fully understand dictionaries, so I'm sure what I'm doing is, at best, flawed ... and probably just outright dumb.

Code:
# Set up and initialize two-dimensional dict
maxR = 3
R = {"one": [0] * maxR,
     "two": [0] * maxR
     }

# Set up and initialize three-dimensional dict
maxE = 4
E = {"alpha": [[0] * maxE] * maxR,
     "beta" : [[0] * maxE] * maxR
    }

# change some individual values
R ["one"][2] = 11
R ["two"][0] = 13
E ["alpha"][2][3] = 17
E [("beta", 1, 2)] = 29

# Print out contents
for i in range (maxR):
    print ("R [one][", i, ", ] = ", R ["one"][i])
for i in range (maxR):
    print ("R [two][", i, ", ] = ", R ["two"][i])
print ()
for i in range (maxR):
    for j in range (maxE):
        print ("E [alpha][", i, "] [", j, "] = ", E ["alpha"][i][j])
for i in range (maxR):
    for j in range (maxE):
        print ("E [beta][", i, "] [", j, "] = ", E ["beta"][i][j])

Results:
R [one][ 0 , ] =  0   
R [one][ 1 , ] =  0
R [one][ 2 , ] =  11
R [two][ 0 , ] =  13
R [two][ 1 , ] =  0
R [two][ 2 , ] =  0

E [alpha][ 0 ] [ 0 ] =  0
E [alpha][ 0 ] [ 1 ] =  0
E [alpha][ 0 ] [ 2 ] =  0
E [alpha][ 0 ] [ 3 ] =  17
E [alpha][ 1 ] [ 0 ] =  0
E [alpha][ 1 ] [ 1 ] =  0
E [alpha][ 1 ] [ 2 ] =  0
E [alpha][ 1 ] [ 3 ] =  17
E [alpha][ 2 ] [ 0 ] =  0
E [alpha][ 2 ] [ 1 ] =  0
E [alpha][ 2 ] [ 2 ] =  0
E [alpha][ 2 ] [ 3 ] =  17
E [beta][ 0 ] [ 0 ] =  0
E [beta][ 0 ] [ 1 ] =  0
E [beta][ 0 ] [ 2 ] =  29
E [beta][ 0 ] [ 3 ] =  0
E [beta][ 1 ] [ 0 ] =  0
E [beta][ 1 ] [ 1 ] =  0
E [beta][ 1 ] [ 2 ] =  29
E [beta][ 1 ] [ 3 ] =  0
E [beta][ 2 ] [ 0 ] =  0
E [beta][ 2 ] [ 1 ] =  0
E [beta][ 2 ] [ 2 ] =  29
E [beta][ 2 ] [ 3 ] =  0

The two-dimensional version ("R") works as I expected. However the three-dimensional version ("E") does not -- it appears to set values in a slice rather than an individual element. Note the "17" and "29" values above. What am I doing wrong? [note: my actual application is not homogeneous so I can't use arrays]

0 Answers0