Extracting the Minimum x Value Keys from Dictionary
Question:
Suppose we wish to extract the minimum value from a dictionary like so
scores = {
0:1.3399288498085087,
1:1.2672683347433629,
3:1.6999159970296505,
4:1.8410942584597279,
5:1.336658057628646
}
#find minimum value in dictionary
minimum_value = min(scores.values())
#get keys with minimal value using list comprehension
minimum_keys = [key for key in scores if scores[key]==minimum_value]
minimum_keys
This returns the key with the lowest value. However, what if I wish to extract the minimum 2 keys and put them into a list? What if I wanted the minimum 20? How would I go about doing this for an arbitrary number of minimal values desired?
Answers:
In fact, the problem is simpler than you think:
scores = {
0:1.3399288498085087,
1:1.2672683347433629,
3:1.6999159970296505,
4:1.8410942584597279,
5:1.336658057628646
}
# minimum key
print(min(scores, key=scores.get))
# n minimum keys
print(sorted(scores, key=scores.get)[:3])
Output:
1
[1, 5, 0]
Both min
and sorted
allow you to provide a key
which is some function to be called with a value, to compute an associated value to be used for sorting. By providing scores.get
as that function, you can sort keys by their matching value, which is what you want.
It can be solved as below:
# your dictionary
scores = {
0:1.3399288498085087,
1:1.2672683347433629,
3:1.6999159970296505,
4:1.8410942584597279,
5:1.336658057628646
}
# a list to store keys
min_keys = []
# how many minimum keys you need
count = 2
# iterate over dict items, sorted based on values
for key,val in sorted(scores.items(), key=lambda x:x[1])[:count]:
min_keys.append(key)
print(min_keys)
# prints [1,5]
To extract the minimum k keys with their corresponding values, you can use the heapq.nsmallest()
method. Here’s an example of how to use it:
import heapq
scores = {
0:1.3399288498085087,
1:1.2672683347433629,
3:1.6999159970296505,
4:1.8410942584597279,
5:1.336658057628646
}
k = 2 # number of keys to extract
# extract the k keys with the smallest values
minimum_items = heapq.nsmallest(k, scores.items(), key=lambda x: x[1])
# create a list of the k keys
minimum_keys = [item[0] for item in minimum_items]
# create a list of the k values
minimum_values = [item[1] for item in minimum_items]
print(minimum_keys)
print(minimum_values)
This will output:
[1, 0]
[1.2672683347433629, 1.3399288498085087]
Note that heapq.nsmallest()
returns a list of tuples containing the key-value pairs of the smallest k items. We use a lambda
function to specify that the key for comparison should be the second element of each tuple (the value). Then, we extract the keys and values separately into two lists using list comprehensions.
Suppose we wish to extract the minimum value from a dictionary like so
scores = {
0:1.3399288498085087,
1:1.2672683347433629,
3:1.6999159970296505,
4:1.8410942584597279,
5:1.336658057628646
}
#find minimum value in dictionary
minimum_value = min(scores.values())
#get keys with minimal value using list comprehension
minimum_keys = [key for key in scores if scores[key]==minimum_value]
minimum_keys
This returns the key with the lowest value. However, what if I wish to extract the minimum 2 keys and put them into a list? What if I wanted the minimum 20? How would I go about doing this for an arbitrary number of minimal values desired?
In fact, the problem is simpler than you think:
scores = {
0:1.3399288498085087,
1:1.2672683347433629,
3:1.6999159970296505,
4:1.8410942584597279,
5:1.336658057628646
}
# minimum key
print(min(scores, key=scores.get))
# n minimum keys
print(sorted(scores, key=scores.get)[:3])
Output:
1
[1, 5, 0]
Both min
and sorted
allow you to provide a key
which is some function to be called with a value, to compute an associated value to be used for sorting. By providing scores.get
as that function, you can sort keys by their matching value, which is what you want.
It can be solved as below:
# your dictionary
scores = {
0:1.3399288498085087,
1:1.2672683347433629,
3:1.6999159970296505,
4:1.8410942584597279,
5:1.336658057628646
}
# a list to store keys
min_keys = []
# how many minimum keys you need
count = 2
# iterate over dict items, sorted based on values
for key,val in sorted(scores.items(), key=lambda x:x[1])[:count]:
min_keys.append(key)
print(min_keys)
# prints [1,5]
To extract the minimum k keys with their corresponding values, you can use the heapq.nsmallest()
method. Here’s an example of how to use it:
import heapq
scores = {
0:1.3399288498085087,
1:1.2672683347433629,
3:1.6999159970296505,
4:1.8410942584597279,
5:1.336658057628646
}
k = 2 # number of keys to extract
# extract the k keys with the smallest values
minimum_items = heapq.nsmallest(k, scores.items(), key=lambda x: x[1])
# create a list of the k keys
minimum_keys = [item[0] for item in minimum_items]
# create a list of the k values
minimum_values = [item[1] for item in minimum_items]
print(minimum_keys)
print(minimum_values)
This will output:
[1, 0]
[1.2672683347433629, 1.3399288498085087]
Note that heapq.nsmallest()
returns a list of tuples containing the key-value pairs of the smallest k items. We use a lambda
function to specify that the key for comparison should be the second element of each tuple (the value). Then, we extract the keys and values separately into two lists using list comprehensions.