multi dimensional dictionary

Paul McGuire ptmcg at austin.rr.com
Wed May 28 09:45:19 EDT 2008


On May 28, 3:11 am, Peter Otten <__pete... at web.de> wrote:
> Gary Herron wrote:
> > Alok Kumar wrote:
> >> Dear All,
>
> >> I am using dictionary for filling my xpath parsed data.
>
> >> I wanted to use in the following manner.
>
> >> mydict[index] ["key1"] ["key2"]    #Can someone help me with right
> >> declaration.
>
> >> So that I can fill my XML xpath parsed data
>
> >> mydict[0] ["person"] ["setTime"] = "12:09:30"
> >> mydict[0] ["person"] ["clrTime"] = "22:09:30"
>
> [I didn't see the original post]
>
> >>> from collections import defaultdict
> >>> def make_inner():
>
> ...     return defaultdict(lambda: defaultdict(make_inner))
> ...>>> mydict = make_inner()
> >>> mydict[0]["person"]["setTime"] = "12:09:30"
> >>> mydict[0]["person"]["shoes"]["color"] = "bright yellow"
> >>> mydict
>
<snip>

When this has come up in previous threads, I think this was the best
solution that was proposed:


from collections import defaultdict

class recursivedefaultdict(defaultdict):
    def __init__(self):
        self.default_factory = type(self)


Here is this recursivedefaultdict in action:

data = [
    ('A','B','Z',1),
    ('A','C','Y',2),
    ('A','C','X',3),
    ('B','A','W',4),
    ('B','B','V',5),
    ('B','B','U',6),
    ('B','D','T',7),
    ]

table = recursivedefaultdict()

for k1,k2,k3,v in data:
    table[k1][k2][k3] = v

for kk in sorted(table.keys()):
    print "-",kk
    for jj in sorted(table[kk].keys()):
        print "  -",jj
        for ii in sorted(table[kk][jj].keys()):
            print "    -",ii,table[kk][jj][ii]

Prints:

- A
  - B
    - Z 1
  - C
    - X 3
    - Y 2
- B
  - A
    - W 4
  - B
    - U 6
    - V 5
  - D
    - T 7

-- Paul




More information about the Python-list mailing list