Initializing a dictionary in python with a key value and no corresponding values

PythonDictionaryInitializationKey

Python Problem Overview


I was wondering if there was a way to initialize a dictionary in python with keys but no corresponding values until I set them. Such as:

Definition = {'apple': , 'ball': }

and then later i can set them:

Definition[key] = something

I only want to initialize keys but I don't know the corresponding values until I have to set them later. Basically I know what keys I want to add the values as they are found. Thanks.

Python Solutions


Solution 1 - Python

Use the fromkeys function to initialize a dictionary with any default value. In your case, you will initialize with None since you don't have a default value in mind.

empty_dict = dict.fromkeys(['apple','ball'])

this will initialize empty_dict as:

empty_dict = {'apple': None, 'ball': None}

As an alternative, if you wanted to initialize the dictionary with some default value other than None, you can do:

default_value = 'xyz'
nonempty_dict = dict.fromkeys(['apple','ball'],default_value)

Solution 2 - Python

You could initialize them to None.

Solution 3 - Python

you could use a defaultdict. It will let you set dictionary values without worrying if the key already exists. If you access a key that has not been initialized yet it will return a value you specify (in the below example it will return None)

from collections import defaultdict
your_dict = defaultdict(lambda : None)

Solution 4 - Python

It would be good to know what your purpose is, why you want to initialize the keys in the first place. I am not sure you need to do that at all.

  1. If you want to count the number of occurrences of keys, you can just do:

    Definition = {}

    ...

    Definition[key] = Definition.get(key, 0) + 1

  2. If you want to get None (or some other value) later for keys that you did not encounter, again you can just use the get() method:

    Definition.get(key) # returns None if key not stored Definition.get(key, default_other_than_none)

  3. For all other purposes, you can just use a list of the expected keys, and check if the keys found later match those.

For example, if you only want to store values for those keys:

expected_keys = ['apple', 'banana']
# ...
if key_found in expected_keys:
    Definition[key_found] = value

Or if you want to make sure all expected keys were found:

assert(all(key in Definition for key in expected_keys))

Solution 5 - Python

You can initialize the values as empty strings and fill them in later as they are found.

dictionary = {'one':'','two':''}
dictionary['one']=1
dictionary['two']=2

Solution 6 - Python

Comprehension could be also convenient in this case:

# from a list
keys = ["k1", "k2"]
d = {k:None for k in keys}

# or from another dict
d1 = {"k1" : 1, "k2" : 2}
d2 = {k:None for k in d1.keys()}

d2
# {'k1': None, 'k2': None}

Solution 7 - Python

q = input("Apple")
w = input("Ball")
Definition = {'apple': q, 'ball': w}

Solution 8 - Python

Based on the clarifying comment by @user2989027, I think a good solution is the following:

definition = ['apple', 'ball']
data = {'orange':1, 'pear':2, 'apple':3, 'ball':4}
my_data = {}
for k in definition:
  try:
    my_data[k]=data[k]
  except KeyError:
    pass
print my_data

I tried not to do anything fancy here. I setup my data and an empty dictionary. I then loop through a list of strings that represent potential keys in my data dictionary. I copy each value from data to my_data, but consider the case where data may not have the key that I want.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser2989027View Question on Stackoverflow
Solution 1 - PythoncodegeekView Answer on Stackoverflow
Solution 2 - PythonScott HunterView Answer on Stackoverflow
Solution 3 - PythonHammerView Answer on Stackoverflow
Solution 4 - Pythonuser2443147View Answer on Stackoverflow
Solution 5 - PythoncreggnogView Answer on Stackoverflow
Solution 6 - PythonabiratsisView Answer on Stackoverflow
Solution 7 - PythonAktufonoView Answer on Stackoverflow
Solution 8 - PythonRobert LuggView Answer on Stackoverflow