The example shows how to establish a dictionary of (row, column):value pairs to mimic a two dimensional array. This can be easily expanded to more dimensions. Python3 has dictionary comprehension, making the process of creating a dictionary of this type easier.

# use Python3's dictionary comprehension to mimic
# a 2 dimensional array with a dictionary
# with (row, column) index tuples as keys
# tested with Python 3.1.2 by vegaseat

def print_sortkey(d):
    """
    print dictionary d with keys sorted
    """
    for key in sorted(d):
        print( "%s --> %s" % (key, d[key]) )
    

# create a 3 x 4 2D-array using a dictionary with index tuples 
# as keys, initialize with zero
d_arr = {(x,y):0 for x in range(3) for y in range(4)} 

print( d_arr )
print( '-'*20 )

"""my result (tuples are in hash order) -->
{(0, 1): 0, (1, 2): 0, (0, 0): 0, (2, 1): 0, (0, 2): 0, ...}
"""

# change some values, basically assign to index
d_arr[2, 1] = 5
# or ...
row = 1
col = 0
d_arr[row, col] = 7
# or ...
ix = (0, 0)
d_arr[ix] = 9

print_sortkey( d_arr )
print( '-'*20 )

"""my result (sorted by index tuple) -->
(0, 0) --> 9
(0, 1) --> 0
(0, 2) --> 0
(0, 3) --> 0
(1, 0) --> 7
(1, 1) --> 0
(1, 2) --> 0
(1, 3) --> 0
(2, 0) --> 0
(2, 1) --> 5
(2, 2) --> 0
(2, 3) --> 0
"""

# get a specific value from a given index tuple
print( d_arr[0, 0] )  # 9
# or ...
row = 0
col = 0
print( d_arr[row, col] )  # 9
# or ... 
ix = (0, 0)
print( d_arr[ix] )  # 9

First of all i LOVE these code snippets you did for various Python topics, i find them EXTREMELY helpful. With that said, i'm wondering what does the term "hash order" mean? I've seen the word "hashable" used several times now with Python and do not understand what it is referring to.

In general a hashing algorithm turns a hashable object (immutable) into an integer value that is much faster to search.

I'm sorry, i don't see how your explanation lends itself to the phrase, "(tuples are in hash order)"

print( "%s --> %s" % (key, d[key]) )

Is incorrect, and will not run.
Corrected version:

ar = { (x,y,z):0                            # creating the array
       for x in range(3)
       for y in range (3)
       for z in range (3)} 
ar [2,1,0] = 777                            # random value
ar [2,2,1] = 2345                           # random value
for x in sorted(ar):                        #output
    print(str(x) + " --- " + str(ar[x]))    #print output

This works just fine with Python27 or Python32 ...

ar = { (x,y,z):0
       for x in range(3)
       for y in range(3)
       for z in range(3)} 

ar[2,1,0] = 777 
ar[2,2,1] = 2345

for key in sorted(ar):
    print("%s --> %s" % (key, ar[key]))

'''my result -->
(0, 0, 0) --> 0
(0, 0, 1) --> 0
(0, 0, 2) --> 0
(0, 1, 0) --> 0
(0, 1, 1) --> 0
(0, 1, 2) --> 0
(0, 2, 0) --> 0
(0, 2, 1) --> 0
(0, 2, 2) --> 0
(1, 0, 0) --> 0
(1, 0, 1) --> 0
(1, 0, 2) --> 0
(1, 1, 0) --> 0
(1, 1, 1) --> 0
(1, 1, 2) --> 0
(1, 2, 0) --> 0
(1, 2, 1) --> 0
(1, 2, 2) --> 0
(2, 0, 0) --> 0
(2, 0, 1) --> 0
(2, 0, 2) --> 0
(2, 1, 0) --> 777
(2, 1, 1) --> 0
(2, 1, 2) --> 0
(2, 2, 0) --> 0
(2, 2, 1) --> 2345
(2, 2, 2) --> 0
'''

I am using python27 and neither works for me. I get the following error: Message File Name Line Position
Traceback
<module> <module1> 23
NameError: name 'ar' is not defined

How to convert this multidimensional array into a matrix with (x,y) will be x and y co-ordinate and value as element values?

The article starter has earned a lot of community kudos, and such articles offer a bounty for quality replies.