What is Python Dict fromkeys()?

The dict fromkeys() method in Python is a convenient function that creates a new dictionary with specified keys and default values or specific values. It takes two parameters: seq, which represents the sequence of keys, and value (optional), which represents the default value or specific value assigned to each key. Dict fromkeys() method returns the newly created dictionary with the provided keys and values.

Let’s dive into the details of the dict fromkeys() method and explore various use cases and examples to help you understand its functionality better.

What does dict Fromkeys() do in Python?

The dict fromkeys() method does two essential things in Python. First, it creates a new dictionary with the given keys from the provided sequence. Second, it assigns either a default value or specific value to each key in the newly created dictionary.

Python Dict fromkeys Syntax and Parameters

The syntax for using the dict fromkeys() method is as follows:

new_dict = dict.fromkeys(seq, value)

Here, new_dict is the new dictionary that will be created, seq is the sequence of keys, and value (optional) is the default value or specific value assigned to each key. Now, let’s dive into some practical examples to see how the fromkeys() method works in action.

How do you use Fromkeys()?

Using the dict fromkeys() method is straightforward. Let’s explore different ways to use this method and understand its behavior through examples.

I. Creating a Dictionary with Default Values using fromkeys()

Imagine you want to create a dictionary representing the population of different cities, but you don’t have the population data yet. In such cases, you can use the fromkeys() method to set a default value for each city key, indicating that the population data is missing. Here’s an example:

Example Code
cities = ['New York', 'Paris', 'London'] default_population = 'Data Not Available' population_dict = dict.fromkeys(cities, default_population) print(population_dict)

In this example, we have a list cities containing the names of cities. We want to create a dictionary population_dict with city names as keys and the default value 'Data Not Available' for each city. By using the fromkeys() method, we achieve this. When we print the population_dict, we get the following output:

Output
{‘New York’: ‘Data Not Available’, ‘Paris’: ‘Data Not Available’, ‘London’: ‘Data Not Available’}

As you can see, the fromkeys() method creates a new dictionary where each city key has the default population value 'Data Not Available'.

II. Providing Values for Specific Keys with the fromkeys()

In some cases, you may want to assign specific values to certain keys while creating a new dictionary. Let’s say you’re building a dictionary representing the rankings of popular celebrities. Here’s an example:

Example Code
celebrities = ['Tom Hanks', 'Jennifer Aniston', 'Brad Pitt'] default_rank = 'Not Ranked' rankings_dict = dict.fromkeys(celebrities, default_rank) rankings_dict['Jennifer Aniston'] = 2 rankings_dict['Brad Pitt'] = 1 print(rankings_dict)

In this example, we have a list celebrities containing the names of popular celebrities. We use the fromkeys() method to create a dictionary rankings_dict with celebrity names as keys and the default value 'Not Ranked' for each celebrity. However, we then assign specific values to certain keys using the assignment operator (=). Jennifer Aniston is assigned the rank 2, and Brad Pitt is assigned the rank 1. When we print the rankings_dict, we get the following output:

Output
{‘Tom Hanks’: ‘Not Ranked’, ‘Jennifer Aniston’: 2, ‘Brad Pitt’: 1}

As you can see, the fromkeys() method sets the default rank value 'Not Ranked' for all celebrities. We then override the default values for Jennifer Aniston and Brad Pitt, assigning them their respective ranks.

III. Handling Missing Keys in the fromkeys() Method

Dict fromkeys() method assigns the same value to each key provided in the sequence. However, it’s important to note that if you modify the value assigned to a key, it will affect all instances of that key in the dictionary. Let’s see an example to understand this behavior:

Example Code
fruits = ['apple', 'banana', 'orange'] default_taste = 'sweet' fruit_dict = dict.fromkeys(fruits, default_taste) fruit_dict['banana'] = 'tangy' print(fruit_dict)

In this example, we have a list fruits containing the names of fruits. We use the fromkeys() method to create a dictionary fruit_dict with fruit names as keys and the default value 'sweet' for each fruit. However, we then modify the value assigned to the key 'banana', changing it to 'tangy'. When we print the fruit_dict, we get the following output:

Output
{‘apple’: ‘sweet’, ‘banana’: ‘tangy’, ‘orange’: ‘sweet’}

As you can see, modifying the value for the key 'banana' affects all instances of that key in the dictionary. So, be cautious when changing values after creating a dictionary using the fromkeys() method.

IV. Immutable Default Values in fromkeys()

When using dict fromkeys() method, it’s important to note that the default value assigned to each key is immutable. This means that if you assign a mutable object as the default value, such as a list or a dictionary, any modifications made to that object will be reflected across all keys in the dictionary. Let’s explore this concept with an example:

Example Code
names = ['John', 'Jane', 'Michael'] default_scores = [] scores_dict = dict.fromkeys(names, default_scores) scores_dict['John'].append(90) print(scores_dict)

In this example, we have a list names containing names of individuals. We use the fromkeys() method to create a dictionary scores_dict with names as keys and an empty list default_scores as the default value for each key. However, when we append a score of 90 to the value associated with the key 'John', we find that the score is appended to the lists for all keys in the dictionary. This is because the default value is mutable, and any modifications made to it are reflected across all instances. The output of this example will be:

Output
{‘John’: [90], ‘Jane’: [90], ‘Michael’: [90]}

To avoid this behavior, you can use a callable object as the default value, as we’ll explore in the next section.

V. Customizing Default Values with Callable Objects

Instead of using immutable default values, you can customize the default value for each key by using callable objects. Callable objects are objects that can be called like functions. Let’s see how we can utilize a callable object to customize default values:

Example Code
def get_default_score(): return [] names = ['John', 'Jane', 'Michael'] scores_dict = dict.fromkeys(names) for key in scores_dict: scores_dict[key] = get_default_score() scores_dict['John'].append(90) print(scores_dict)

Here, we create an empty dictionary using dict.fromkeys(names) and then iterate over each key in the dictionary using a for loop. For each key, we assign a new list returned by the get_default_score() function. This ensures that each key has its own separate default value, which is an empty list.

Now, when we append a score of 90 to the value associated with the key 'John', it will only affect the list for that specific key. The output of this example will be:

Output
{‘John’: [90], ‘Jane’: [], ‘Michael’: []}

VI. Creating Multiple Dictionaries with fromkeys() in a Single Operation

Dict fromkeys() method also allows you to create multiple dictionaries in a single operation. This can be useful when you want to initialize multiple dictionaries with the same set of keys but different default values. Let’s take a look at an example:

Example Code
names = ['John', 'Jane', 'Michael'] default_score = 0 score_dict_1, score_dict_2 = dict.fromkeys(names, default_score), dict.fromkeys(names, default_score) score_dict_1['John'] = 90 score_dict_2['Jane'] = 85 print(score_dict_1) print(score_dict_2)

In this example, we use the fromkeys() method twice to create two separate dictionaries, score_dict_1 and score_dict_2, with the same set of keys from the names list. Each dictionary has the default value default_score assigned to each key. We then assign specific scores to individual keys in each dictionary. The output of this example will be:

Output
{‘John’: 90, ‘Jane’: 0, ‘Michael’: 0}
{‘John’: 0, ‘Jane’: 85, ‘Michael’: 0}

As you can see, by using the fromkeys() method, we can easily create multiple dictionaries with the same set of keys but different default values in a single operation.

VII. Utilizing the fromkeys() Method for Initialization and Resetting

Another use case of dict fromkeys() method is for dictionary initialization and resetting. You can use it to quickly initialize a dictionary with a set of keys and default values, or to reset an existing dictionary with new default values. Let’s see how this can be done:

Example Code
def get_default_value(): return 'N/A' details = {'name': ", 'age': 0, 'country': "} details = dict.fromkeys(details, get_default_value) print(details)

In this example, we have an existing dictionary details with keys representing various details such as name, age, and country. We use the fromkeys() method to reset the details dictionary with default values returned by the get_default_value() function. The output of this example will be:

Output
{‘name’: ‘N/A’, ‘age’: ‘N/A’, ‘country’: ‘N/A’}

As you can see, Dict fromkeys() method allows us to initialize or reset the values of a dictionary with default values in a concise manner.

Potential Pitfalls and Error Handling with fromkeys()

When using the dict fromkeys() method in Python, there are a few potential pitfalls and error handling considerations to keep in mind. Let’s explore them:

I. Mutable Default Values

One common pitfall is when using mutable objects as default values. Remember that the default value assigned by Dict fromkeys() is shared among all keys in the dictionary. If the default value is mutable, such as a list or dictionary, any modifications made to it will affect all instances of that key. To avoid unexpected behavior, consider using immutable objects as default values or use a callable object to customize default values for each key.

II. Key Errors

When accessing a key that does not exist in the dictionary, a KeyError will be raised. To handle this error, you can use the get() method or check if the key exists using the in keyword before accessing it.

III. None as Default Value

If None is used as the default value in fromkeys(), it will be shared among all keys. Modifying the value for one key will affect all instances of that key. Be cautious when using None as the default value, and consider using immutable objects or callable objects instead.

IV. Iterables with Unhashable Elements

The keys provided as a sequence or iterable in fromkeys() should be hashable. Hashable objects can be used as dictionary keys. If the iterable contains unhashable elements, such as lists or dictionaries, a TypeError will be raised. Make sure the elements in the iterable are hashable to avoid this error.

V. Modifying Keys

It’s important to note that fromkeys() creates a dictionary with immutable keys. Once the dictionary is created, you cannot modify the keys themselves. If you need to modify the keys, you’ll have to create a new dictionary or use other dictionary methods like update().

Overwriting Existing Values: When using fromkeys() to initialize a dictionary, be cautious if the dictionary already contains some keys. fromkeys() will assign the same default value to each key, even if the key already exists in the dictionary. This can lead to unintentional overwriting of existing values. Ensure that you’re using fromkeys() on an empty dictionary or handle existing keys appropriately.

To avoid these pitfalls and errors, it’s important to thoroughly understand the behavior and limitations of the dict fromkeys() method. Carefully review your code and consider the potential scenarios where errors or unexpected behavior can occur. Handle these cases gracefully by implementing appropriate error handling techniques, using immutable default values, or utilizing other dictionary methods to manipulate and update your dictionaries effectively.

Congratulations on exploring the Python dict fromkeys() method! You’ve learned how this convenient function helps you create dictionaries with specified keys and default or specific values. By understanding the syntax and parameters of fromkeys(), you gained the ability to utilize it effectively in your code.

Now armed with this knowledge, go ahead and leverage the power of dict fromkeys() in your Python programs. Keep exploring and experimenting with different scenarios to unleash the full potential of this method. Happy coding!

 
Scroll to Top