2.5. Dictionary

2.5.1. Update: Update a Dictionary With Items From Another Dictionary

If you want to update a dictionary with items from another dictionary or from an iterable of key/value pairs, use the update method.

birth_year = {"Ben": 1997}
new_birth_year = {"Michael": 1993, 'Lauren': 1999}
birth_year.update(new_birth_year)
birth_year.update(Josh=1990, Olivia=1991)
birth_year 
{'Ben': 1997, 'Michael': 1993, 'Lauren': 1999, 'Josh': 1990, 'Olivia': 1991}

2.5.2. Key Parameter in Max(): Find the Key with the Largest Value

Apply max on a Python dictionary will give you the largest key, not the key with the largest value. If you want to find the key with the largest value, specify that using the key parameter in the max method.

birth_year = {"Ben": 1997, "Alex": 2000, "Oliver": 1995}

max(birth_year)
'Oliver'
max_val = max(birth_year, key=lambda k: birth_year[k])
max_val
'Alex'

2.5.3. dict.get: Get the Default Value of a Dictionary if a Key Doesn’t Exist

If you want to get the default value when a key doesn’t exist in a dictionary, use dict.get. In the code below, since there is no key meeting3, the default value online is returned.

locations = {'meeting1': 'room1', 'meeting2': 'room2'}
locations.get('meeting1', 'online')
'room1'
locations.get('meeting3', 'online')
'online'

2.5.4. Double dict.get: Get Values in a Nested Dictionary with Missing Keys

It can be challenging to get values in a nested dictionary with missing keys.

fruits = [
    {"name": "apple", "attr": {"color": "red", "taste": "sweet"}},
    {"name": "orange", "attr": {"taste": "sour"}},
    {"name": "grape", "attr": {"color": "purple"}},
    {"name": "banana"},
]

You can use an if-else statement but it is long and hard to read.

colors = [
    fruit["attr"]["color"]
    if "attr" in fruit and "color" in fruit["attr"]
    else "unknown"
    for fruit in fruits
]
colors
['red', 'unknown', 'purple', 'unknown']

A better way is to use the get method twice like below. The first get method will return an empty dictionary if the key attr doesn’t exist. The second get method will return unknown if the key color doesn’t exist

colors = [fruit.get("attr", {}).get("color", "unknown") for fruit in fruits]
colors
['red', 'unknown', 'purple', 'unknown']

2.5.5. dict.fromkeys: Get a Dictionary From a List and a Value

If you want to get a dictionary from a list and a value, try dict.fromkeys.

furnitures = ['bed', 'table', 'chair']
food = ['apple', 'pepper', 'onion']
loc1 = 'IKEA'
loc2 = 'ALDI'

For example, we can use dict.fromkeys to create a dictionary of furnitures’ locations:

furniture_loc = dict.fromkeys(furnitures, loc1)
furniture_loc
{'bed': 'IKEA', 'table': 'IKEA', 'chair': 'IKEA'}

… or create a dictionary of food’s locations:

food_loc = dict.fromkeys(food, loc2)
food_loc
{'apple': 'ALDI', 'pepper': 'ALDI', 'onion': 'ALDI'}

These 2 results can be combined into a location dictionary like below:

locations = {**food_loc, **furniture_loc}
locations
{'apple': 'ALDI',
 'pepper': 'ALDI',
 'onion': 'ALDI',
 'bed': 'IKEA',
 'table': 'IKEA',
 'chair': 'IKEA'}