Declaring a multi dimensional dictionary in python

后端 未结 8 1606
闹比i
闹比i 2020-12-08 02:03

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 <

8条回答
  •  眼角桃花
    2020-12-08 02:35

    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}})
    

提交回复
热议问题