All Course > Python > Python Dictionaries Nov 01, 2023

Manipulate Python Dictionaries

Manipulating dictionaries is a fundamental skill for every Python programmer. Python dictionaries are versatile data structures that allow you to store key-value pairs efficiently. In this article, we will explore various techniques, examples, and best practices for manipulating Python dictionaries to make your code more efficient and readable.

What is a Python Dictionary?

A Python Dictionary is like a collection of words and their definitions. In Python, it’s a data structure that stores pairs of items. Each pair has a key, which is like the word, and a value, which is like the definition. For example, you can have a dictionary of fruits where “apple” is the key and its definition, like “a round fruit with a red or green skin and a crisp flesh,” is the value. Unlike lists, where items are accessed by their position, dictionaries are accessed by their keys. This means you can quickly find the definition of a word without needing to know its position in the dictionary.

# Creating a dictionary of fruits
fruits_dictionary = {
    "apple": "a round fruit with a red or green skin and a crisp flesh",
    "banana": "a long curved fruit that grows in clusters",
}

# Accessing the definition of a fruit
print("The definition of 'apple' is:", fruits_dictionary["apple"])

Updating Dictionaries

Updating Python dictionaries is a common task in programming. It involves modifying the key-value pairs stored in a dictionary. To update a dictionary, you need to specify the key for which you want to change the value.

For example, if you have a dictionary called my_dict, and you want to update the value associated with the key ‘name’, you can do so by assigning a new value to it, my_dict[‘name’] = ‘new_value’. This replaces the old value with the new one.

Similarly, you can add new key-value pairs to a dictionary by simply assigning a value to a new key, my_dict[‘new_key’] = ‘new_value’. However, if the key already exists, its value will be overwritten. This is important to remember when updating dictionaries.

Additionally, you can also update dictionaries using the update() method, which takes another dictionary as its argument and adds its key-value pairs to the original dictionary. This can be useful when you have multiple updates to make at once.

# Example of updating a dictionary by modifying an existing key-value pair
my_dict = {'name': 'John', 'age': 30}
my_dict['name'] = 'Alice'
print(my_dict)  # Output: {'name': 'Alice', 'age': 30}

# Example of adding a new key-value pair to a dictionary
my_dict['new_key'] = 'new_value'
print(my_dict)  # Output: {'name': 'Alice', 'age': 30, 'new_key': 'new_value'}

# Example of updating a dictionary using the update() method
my_dict.update({'city': 'New York', 'country': 'USA'})
print(my_dict)  # Output: {'name': 'Alice', 'age': 30, 'new_key': 'new_value', 'city': 'New York', 'country': 'USA'}

Deleting Dictionary Items

When you want to remove items from a Python dictionary, you can use various methods. One common approach is to use the del keyword followed by the key of the item you want to delete. For example, if you have a dictionary called my_dict and you want to delete the item with the key ‘key’, you can write del my_dict[‘key’]. This will remove the item from the dictionary.

Alternatively, you can use the pop() method, which not only removes the item from the dictionary but also returns its value. For instance, my_dict.pop(‘key’) will remove the item with the key ‘key’ from my_dict and return its value.

Another method is to use the popitem() method, which removes and returns the last inserted item in the dictionary. This method doesn’t take any arguments. It’s useful when you want to remove items from the dictionary in an arbitrary order. For instance, you can write my_dict.popitem() to remove and return the last inserted item from my_dict.

However, keep in mind that dictionaries are unordered collections, so the “last inserted” item may not necessarily be the last item you added. It’s also worth noting that attempting to delete a key that doesn’t exist in the dictionary will raise a KeyError. So, be cautious when using these methods to avoid such errors.

# Creating a dictionary
my_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

# Using del to remove an item
del my_dict['a']
print("Dictionary after using del:", my_dict)

# Using pop() to remove an item
removed_value = my_dict.pop('c')
print("Removed value using pop():", removed_value)
print("Dictionary after using pop():", my_dict)

# Using popitem() to remove the last inserted item
last_item = my_dict.popitem()
print("Last inserted item removed using popitem():", last_item)
print("Dictionary after using popitem():", my_dict)

Merging Dictionaries

First of all, let’s say you have two dictionaries: dict1 and dict2. You can merge dict2 into dict1 using dict1.update(dict2). This will add all the key-value pairs from dict2 into dict1.

It’s important to note that if there are overlapping keys between the two dictionaries, the values from the dictionary being merged in will overwrite the values of the same keys in the original dictionary.

After merging, the original dictionaries remain unchanged. The changes are applied to the dictionary that is being updated.

# First of all, let's say you have two dictionaries: dict1 and dict2.
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

# You can merge dict2 into dict1 using dict1.update(dict2).
dict1.update(dict2)

# This will add all the key-value pairs from dict2 into dict1.
print("Merged dictionary:", dict1)

Result

Merged dictionary: {'a': 1, 'b': 3, 'c': 4}

Sorting Dictionary Keys

Sorting dictionary keys in Python can be simple. First of all, you use the sorted() function, which takes an iterable and returns a new sorted list. For example, you have a dictionary named my_dict, which contains keys and values. To get a list of sorted keys, you write sorted(my_dict.keys()). This method, which is straightforward, sorts the keys in ascending order by default.

However, you might need to sort the keys in a different order. In that case, you use the sorted() function with the reverse parameter set to True, which sorts the keys in descending order. For instance, sorted(my_dict.keys(), reverse=True) will give you keys sorted from the highest to the lowest.

Similarly, if you want to sort keys based on custom logic, you use the key parameter in the sorted() function, which accepts a function that determines the sorting criteria. For example, you have a dictionary where the keys are strings representing numbers, whom you want to sort numerically, not alphabetically. You use the key parameter like this: sorted(my_dict.keys(), key=int).

# Define a dictionary with keys as strings representing numbers
my_dict = {'3': 'apple', '1': 'banana', '2': 'cherry'}

# Sort keys in ascending order
sorted_keys_asc = sorted(my_dict.keys())
print(sorted_keys_asc)  # Output: ['1', '2', '3']

# Sort keys in descending order
sorted_keys_desc = sorted(my_dict.keys(), reverse=True)
print(sorted_keys_desc)  # Output: ['3', '2', '1']

# Sort keys numerically
sorted_keys_numeric = sorted(my_dict.keys(), key=int)
print(sorted_keys_numeric)  # Output: ['1', '2', '3']

Filtering Dictionary Items

You can filter dictionaries using dictionary comprehensions, which are concise and readable. For example, you can create a new dictionary that contains only the items whose values are greater than a certain number. Similarly, you can filter based on keys.

In addition, the filter() function can be used, which accepts a function and an iterable, returning only those items for which the function returns True. This function can be combined with dict.items() to filter dictionaries. For example, dict(filter(lambda item: item[1] > 10, my_dict.items())) will return a new dictionary with items whose values are greater than 10.

However, filtering a dictionary by keys is straightforward using a dictionary comprehension. You can specify a condition on the keys, resulting in a new dictionary that includes only the desired key-value pairs.

# Sample dictionary
my_dict = {
    'a': 5,
    'b': 15,
    'c': 8,
    'd': 20
}

# Filtering using dictionary comprehension (values greater than 10)
filtered_dict_comprehension = {k: v for k, v in my_dict.items() if v > 10}
print(filtered_dict_comprehension)  # Output: {'b': 15, 'd': 20}

# Filtering using the filter() function (values greater than 10)
filtered_dict_filter = dict(filter(lambda item: item[1] > 10, my_dict.items()))
print(filtered_dict_filter)  # Output: {'b': 15, 'd': 20}

# Filtering using dictionary comprehension (keys that are 'a' or 'c')
filtered_dict_keys = {k: v for k, v in my_dict.items() if k in ['a', 'c']}
print(filtered_dict_keys)  # Output: {'a': 5, 'c': 8}

Dive Deeper into Python Dict Manipulation

You may explore additional Python dict manipulation techniques below to enhance your programming skills.

Best Practices for Python Dictionary Manipulation

When working with Python dictionaries, it’s important to follow some best practices to write clean and efficient code.
- Use dictionary comprehension for concise and readable code.
- Prefer dictionary unpacking over update() for merging dictionaries.
- Avoid modifying dictionaries while iterating over them to prevent unexpected behavior.

Conclusion

To conclude, manipulating Python dictionaries is a crucial skill for any programmer who wants to manage data efficiently. First of all, dictionaries allow you to store key-value pairs, which means you can quickly retrieve information based on a unique key. Secondly, you can easily add, remove, or change items in a dictionary, which makes them very flexible. However, it’s important to remember that dictionaries do not maintain any order, which means the items will not be in the same order in which you added them.

FAQ

Q: Can dictionaries have duplicate keys in Python?
A: No, dictionaries in Python cannot have duplicate keys. If you try to add a duplicate key, it will overwrite the existing value.

Q: How can I check if a key exists in a dictionary?
A: You can use the in keyword to check if a key exists in a dictionary. For example:

my_dict = {'a': 1, 'b': 2}
if 'a' in my_dict:
    print("Key 'a' exists!")

Q: Is the order of dictionary items preserved in Python?
A: Starting from Python 3.7, the order of dictionary items is preserved. However, it’s always a good practice not to rely on this behavior for compatibility across different Python versions.

Comments

There are no comments yet.

Write a comment

You can use the Markdown syntax to format your comment.