I'm using Python v2.7 dictionaries, nested one inside another like this:
def example(format_str, year, value):
format_to_year_to_value_dict = {}
# In the actual code there are many format_str and year values,
# not just the one inserted here.
if not format_str in format_to_year_to_value_dict:
format_to_year_to_value_dict[format_str] = {}
format_to_year_to_value_dict[format_str][year] = value
It seems a bit clumsy to initialize the first level dictionary with an empty dictionary before inserted into the second level dictionary. Is there a way to set a value while at the same time creating a dictionary at the first level if there is not one already there? I imagine something like this to avoid the conditional initializer:
def example(format_str, year, value):
format_to_year_to_value_dict = {}
add_dict_value(format_to_year_to_value_dict[format_str], year, value)
Also, what if the inner dict should itself initialize to a list?
def example(format_str, year, value):
format_to_year_to_value_dict = {}
# In the actual code there are many format_str and year values,
# not just the one inserted here.
if not format_str in format_to_year_to_value_dict:
format_to_year_to_value_dict[format_str] = {}
if not year in format_to_year_to_value_dict[format_str]:
format_to_year_to_value_dict[format_str][year] = []
format_to_year_to_value_dict[format_str][year].append(value)
One way to add a dictionary in the Nested dictionary is to add values one be one, Nested_dict[dict][key] = 'value'. Another way is to add the whole dictionary in one go, Nested_dict[dict] = { 'key': 'value'}.
2) Using dict() method Python empty dictionary means that it does not contain any key-value pair elements. To create an empty dictionary in this example, we can use a dict(), which takes no arguments. If no arguments are provided, an empty dictionary is created.
Dictionaries are also initialized using the curly braces {} , and the key-value pairs are declared using the key:value syntax. You can also initialize an empty dictionary by using the in-built dict function. Empty dictionaries can also be initialized by simply using empty curly braces.
A dictionary can contain dictionaries, this is called nested dictionaries.
Use setdefault
:
If key is in the dictionary, return its value. If not, insert key with a value of default and return default.
format_to_year_to_value_dict.setdefault(format_str, {})[year] = value
Or collections.defaultdict
:
format_to_year_to_value_dict = defaultdict(dict)
...
format_to_year_to_value_dict[format_str][year] = value
With lists in the inner dict:
def example(format_str, year, value):
format_to_year_to_value_dict = {}
format_to_year_to_value_dict.setdefault(format_str, {}).setdefault(year, []).append(value)
or
def example(format_str, year, value):
format_to_year_to_value_dict = defaultdict(lambda: defaultdict(list))
format_to_year_to_value_dict[format_str][year].append(value)
For dicts of unknown depth, you can use this little trick:
tree = lambda: defaultdict(tree)
my_tree = tree()
my_tree['a']['b']['c']['d']['e'] = 'whatever'
from collections import defaultdict
format_to_year_to_value_dict = defaultdict(dict)
This will create a dictionary that calls dict()
when you access keys that don't exist.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With