A multi-dimensional dictionary is simply a dictionary where the values are themselves also dictionaries, creating a nested structure:
new_dic = {} new_dic[1] = {} new_dic[1][2] = 5
You’d have to detect that you already created new_dic[1]
each time, though, to not accidentally wipe that nested object for additional keys under new_dic[1]
.
You can simplify creating nested dictionaries using various techniques; using dict.setdefault()
for example:
new_dic.setdefault(1, {})[2] = 5
dict.setdefault()
will only set a key to a default value if the key is still missing, saving you from having to test this each time.
Simpler still is using the collections.defaultdict()
type to create nested dictionaries automatically:
from collections import defaultdict new_dic = defaultdict(dict) new_dic[1][2] = 5
defaultdict
is just a subclass of the standard dict
type here; every time you try and access a key that doesn’t yet exist in the mapping, a factory function is called to create a new value. Here that’s the dict()
callable, which produces an empty dictionary when called.
Demo:
>>> new_dic_plain = {} >>> new_dic_plain[1] = {} >>> new_dic_plain[1][2] = 5 >>> new_dic_plain {1: {2: 5}} >>> new_dic_setdefault = {} >>> new_dic_setdefault.setdefault(1, {})[2] = 5 >>> new_dic_setdefault {1: {2: 5}} >>> from collections import defaultdict >>> new_dic_defaultdict = defaultdict(dict) >>> new_dic_defaultdict[1][2] = 5 >>> new_dic_defaultdict defaultdict(<type 'dict'>, {1: {2: 5}})