5 Best Ways to Extract a Key’s Value if Key Present in List and Dictionary in Python

πŸ’‘ Problem Formulation: As a Python developer, it’s common to encounter a situation where you need to check if a key is present in a list and then extract its corresponding value from a dictionary. For example, given a list ['apple', 'banana', 'cherry'], and a dictionary {'banana': 2, 'orange': 5, 'apple': 1}, the task is to retrieve the dictionary values where the key is also in the list, resulting in [1, 2].

Method 1: Using List Comprehension and “in” Operator

This method involves iterating over the list of keys and collecting dictionary values using comprehension, only if the key is present in the dictionary. It’s a clean and concise way to achieve the task in a single line of code.

Here’s an example:

keys = ['apple', 'banana', 'cherry']
fruit_dict = {'banana': 2, 'orange': 5, 'apple': 1}

values = [fruit_dict[k] for k in keys if k in fruit_dict]

Output: [1, 2]

This code snippet iterates over each element in the keys list, checks if it exists in the fruit_dict dictionary, and includes the value in the resulting values list. List comprehension makes this approach quite readable and efficient for smaller datasets.

Method 2: Using the get() Method with a Filter

The get() method of dictionaries safely retrieves the value for a key if it exists, returning None otherwise. The filter() function can then remove any None values.

Here’s an example:

keys = ['apple', 'banana', 'cherry']
fruit_dict = {'banana': 2, 'orange': 5, 'apple': 1}

values = list(filter(None, (fruit_dict.get(k) for k in keys)))

Output: [1, 2]

This snippet uses a generator expression to apply fruit_dict.get(k) for each k in keys, which avoids KeyErrors. The filter(None, ...) function then keeps only truthy values, removing any key not found in the dictionary.

Method 3: Using the map() Function

Mapping the keys to their respective values and using filter() to exclude non-existing keys can also be an effective method. The map() function applies a given function to all items in an input list.

Here’s an example:

keys = ['apple', 'banana', 'cherry']
fruit_dict = {'banana': 2, 'orange': 5, 'apple': 1}

values = list(filter(None, map(fruit_dict.get, keys)))

Output: [1, 2]

Here, map(fruit_dict.get, keys) retrieves the values for each key, and like in Method 2, filter(None, ...) removes any None values resulting from keys missing in the dictionary.

Method 4: Using a Traditional For Loop

For those who prefer a more traditional approach, a for loop can be used to iterate through the list of keys and conditionally add the values from the dictionary to a new list.

Here’s an example:

keys = ['apple', 'banana', 'cherry']
fruit_dict = {'banana': 2, 'orange': 5, 'apple': 1}
values = []

for key in keys:
    if key in fruit_dict:
        values.append(fruit_dict[key])

Output: [1, 2]

The for loop iterates over the keys list, and the if statement checks if the current key is present in fruit_dict. If it is, the value is appended to the values list.

Bonus One-Liner Method 5: Using Dictionary Comprehension

A one-liner alternative can be achieved with dictionary comprehension, which filters the dictionary based on the key list and then extracts the values.

Here’s an example:

keys = ['apple', 'banana', 'cherry']
fruit_dict = {'banana': 2, 'orange': 5, 'apple': 1}

values = [value for key, value in fruit_dict.items() if key in keys]

Output: [1, 2]

This snippet uses dictionary comprehension, which checks each (key, value) pair in fruit_dict. If the key is in keys, the value is included in the output list.

Summary/Discussion

  • Method 1: List Comprehension and “in” Operator. Strengths: concise, readable. Weaknesses: Not as explicit as a for loop.
  • Method 2: get() Method with a Filter. Strengths: safe handling of missing keys. Weaknesses: requires conversion to a list and handling of None values.
  • Method 3: map() Function. Strengths: functional approach, concise. Weaknesses: readability may be reduced for those unfamiliar with functional programming.
  • Method 4: Traditional For Loop. Strengths: very explicit, easy to understand. Weaknesses: more verbose than other methods.
  • Bonus Method 5: Dictionary Comprehension. Strengths: a one-liner solution. Weaknesses: readability can suffer for those not familiar with comprehensions.