I need to make a two dimensional dictionary in python. e.g. new_dic[1][2] = 5
When I make new_dic = {}, and try to insert values, I get a <
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(, {1: {2: 5}})