In this Python tutorial, we will learn about the Python dictionary to find a key by value. Also, we will discuss the below examples:
- Python dictionary find key by max value.
- Python dictionary get Key value by index
- Python dictionary find key using value
- Python dictionary get key value pair
- Python dictionary find key with maximum value
- Python dictionary get key if value exists
- Here we can see how to get the key by value in Python.
- We can perform this task by various methods, Here is the list of some that we can use.
- By using list.index()
- By using dict.items() method
- By using list comprehension method
By using list.index() method
The index method always returns the index position in a list or dictionary.
Source Code:
to_dictionary ={"Bulgaria":450, "Australia":610, "Canada":916}
new_ke_lis = list(to_dictionary.keys())
new_val = list(to_dictionary.values())
new_pos = new_val.index(610) # value from dictionary
print("Get a key by value:",new_ke_lis[new_pos])
Here is the Screenshot of the following given code
By using dict.items() method
This method returns a dictionary view object that displays the list of a dictionary in the key-value pair form.
Example:
my_dict={"a":6,"z":9,"f":17,"l":10}
for key,value in my_dict.items():
if value==9:
print("key by value:",key)
Execution:
Read: How to Create a Dictionary from one list in Python
By using list comprehension method
In Python to get the key with the maximum value, we can use the list comprehension method. This method will help the user to execute each element along with the for loop to iterate each item.
Example:
new_dictionary={"m":45,"v":19,"q":87,"w":60}
t={s for s in new_dictionary if new_dictionary[s]==19}
print("key by value:",t)
Output:
Read: Python convert dictionary to list
Python dictionary find key by max value
- Let us see how to find the key by the maximum value.
- By using the max() function we will find the key with maximum value in Dictionary.
- To do this task first we will initialize a dictionary and assign them a key-value pairs element. Now use a max() function to get the key with maximum value.
Example:
new_dict={"x":35,"q":29,"e":97,"w":60}
new_ke = max(new_dict, key=new_dict.get)
print("To get Key maxvalue:",new_ke)
Here is the implementation of the following given code
Read: How to create a list of dictionary keys in python
Another example to get the key with max value
By using the itemgetter() function and operator module we can easily get the key. The itemgetter() function returns an object that collects an item from its operand using the operator module.
Let’s take an example and check how to get the key by using the itemgetter() function.
Source Code:
import operator
my_dict1 = {"Bulgaria": 92, "Cuba": 81, "Cyprus": 96}
new_max_key = max(my_dict1.items(), key = operator.itemgetter(1))[0]
print("key with highest value:n",new_max_key)
Here is the Screenshot of the following given code
By using lambda function
In Python, the lambda function did not need any name, they are nameless. They are used to declare a one-line function. In this example, you just need to give the function a value and then provide an expression.
Example:
In this example, we have to check how to find a key with maximum value using the lambda function
my_dict2 = {"Egypt": 129, "Denmark": 95, "Greece": 196}
ma_value = max(my_dict2, key= lambda i: my_dict2[i])
print(ma_value)
Screenshot:
Read: Python dictionary remove
Python dictionary get key value by index
- Let us see how to get a key-value pair by index in the dictionary.
- To perform this task we can use the enumerator method. This is an in-built function in Python that allows the user to check how many iterations have occurred. This method can be used directly for loops and convert them into a list.
- Let’s take an example and check how to get key-value pair by index.
my_new_dict = {'c' : 43, 'i' : 61, 'x' : 93, 'l' : 54}
get_key = 'i'
new_search_key='l'
new_var = list(my_new_dict.items())
output = [ab for ab, new_key in enumerate(new_var) if new_key[0] == get_key]
result2 = [ab for ab, new_key in enumerate(new_var) if new_key[0] == new_search_key]
print("Get index value of key : ",output)
print("Get index value of key : ",result2)
Here is the execution of the following given code
Another example to check how to get key-value index by using dict() method
Source Code:
dict1 = {'JOhn' : 29, 'POtter' : 18, 'Chris' : 17, 'hemsworth' : 14}
ind_lis = list(dict1)
new_key = ind_lis[1]
print("Get key-value by index:",new_key)
Here is the Output of the following given code
Read: Python dictionary length
Python dictionary find key using value
In Python to find a key using the value, we can collect the key from a value by comparing all the values and get the specific key. In this example, we can use dict.items() method.
Example:
Let’s take an example and check how to find a key by using the value.
from typing import TextIO
def new_ke(val):
for k, new_va in to_dictionary.items():
if val == new_va:
return k
return
to_dictionary ={"Australia":56, "China":72, "Turkey":93}
print("Key exist in dictionary:",new_ke(72))
print("key doesnot contain in dictionary:",new_ke(48))
Here is the Screenshot of the following given code
Read: Python Dictionary index
Python dictionary get key value pair
- To get key-value pair in the dictionary we can easily use the enumerator method.
- This method helps the user to access the named index of the position of the key-value element in the dictionary.
Example:
dictionary1 = {"Iran" : 37, "Iraq" : 19, "Ireland" : 64}
for x in enumerate(dictionary1.items()):
print("key-value pair in dictionary:",x)
Here is the implementation of the following given code
Another example to check how to get key value pair
To perform this particular task we can easily use the list comprehension method. This method returns the elements in the form of key-value pairs and it will display the result as tuples of key and value in the list.
Example:
you_dictionary = {"Maldives" : 34, "Mexico" : 159, "Portugal" : 287}
print ("key-value pairs are : ")
print([(m, you_dictionary[m]) for m in you_dictionary])
Here is the Screenshot of the following given code
Python dictionary find key with maximum value
To find the key with the maximum value we can easily use the function values() and keys().
Source Code:
to_dict2 = {'Zimbabwe':689, 'Ukraine':143, 'Italy':189}
new_value = list(to_dict2.values())
new_key = list(to_dict2.keys())
print(new_key[new_value.index(max(new_value))])
Here is the execution of the following given code
Read: Python dictionary initialize
Python dictionary get key if value exist
- Let us see how to get a key if the value exists in dictionary.
Source Code:
from typing import TextIO
def exe_ke(val):
for x, new_va in your_dict.items():
if val == new_va:
return x
return
your_dict ={"m":124, "s":149, "u":98}
print("Value exist in dictionary:",exe_ke(149))
print("value doesnot exist in dictionary:",exe_ke(456))
Execution
You may also like reading the following articles.
- Python dictionary filter
- Python Dictionary sort
- Python dictionary comprehension
- Python dictionary contains
- Python dictionary pop
- Python dictionary of lists
- Get all values from a dictionary Python
- Python creates a dictionary from two lists
In this Python tutorial, we have learned about the Python dictionary to find a key by value. Also, we have also discussed the below examples:
- Python dictionary find key by max value.
- Python dictionary get Key value by index
- Python dictionary find key using value
- Python dictionary get key value pair
- Python dictionary find key with maximum value
Python is one of the most popular languages in the United States of America. I have been working with Python for a long time and I have expertise in working with various libraries on Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… I have experience in working with various clients in countries like United States, Canada, United Kingdom, Australia, New Zealand, etc. Check out my profile.
I’m new to Python dictionaries. I’m making a simple program that has a dictionary that includes four names as keys and the respective ages as values. What I’m trying to do is that if the user enters the a name, the program checks if it’s in the dictionary and if it is, it should show the information about that name.
This is what I have so far:
def main():
people = {
"Austin" : 25,
"Martin" : 30,
"Fred" : 21,
"Saul" : 50,
}
entry = input("Write the name of the person whose age you'd like to know, or write 'ALL' to see all names and ages: ")
if entry == "ALL":
for key, value in people.items():
print ("Name: " + key)
print ("Age: " + str(value) + "n")
elif people.insert(entry) == True:
print ("It works")
main()
I tried searching through the dictionary using .index()
as I know it’s used in lists but it didn’t work. I also tried checking this post but I didn’t find it useful.
I need to know if there is any function that can do this.
already been answered, but since several people mentioned reversing the dictionary, here’s how you do it in one line (assuming 1:1 mapping) and some various perf data:
python 2.6:
reversedict = dict([(value, key) for key, value in mydict.iteritems()])
2.7+:
reversedict = {value:key for key, value in mydict.iteritems()}
if you think it’s not 1:1, you can still create a reasonable reverse mapping with a couple lines:
reversedict = defaultdict(list)
[reversedict[value].append(key) for key, value in mydict.iteritems()]
how slow is this: slower than a simple search, but not nearly as slow as you’d think — on a ‘straight’ 100000 entry dictionary, a ‘fast’ search (i.e. looking for a value that should be early in the keys) was about 10x faster than reversing the entire dictionary, and a ‘slow’ search (towards the end) about 4-5x faster. So after at most about 10 lookups, it’s paid for itself.
the second version (with lists per item) takes about 2.5x as long as the simple version.
largedict = dict((x,x) for x in range(100000))
# Should be slow, has to search 90000 entries before it finds it
In [26]: %timeit largedict.keys()[largedict.values().index(90000)]
100 loops, best of 3: 4.81 ms per loop
# Should be fast, has to only search 9 entries to find it.
In [27]: %timeit largedict.keys()[largedict.values().index(9)]
100 loops, best of 3: 2.94 ms per loop
# How about using iterkeys() instead of keys()?
# These are faster, because you don't have to create the entire keys array.
# You DO have to create the entire values array - more on that later.
In [31]: %timeit islice(largedict.iterkeys(), largedict.values().index(90000))
100 loops, best of 3: 3.38 ms per loop
In [32]: %timeit islice(largedict.iterkeys(), largedict.values().index(9))
1000 loops, best of 3: 1.48 ms per loop
In [24]: %timeit reversedict = dict([(value, key) for key, value in largedict.iteritems()])
10 loops, best of 3: 22.9 ms per loop
In [23]: %%timeit
....: reversedict = defaultdict(list)
....: [reversedict[value].append(key) for key, value in largedict.iteritems()]
....:
10 loops, best of 3: 53.6 ms per loop
Also had some interesting results with ifilter. Theoretically, ifilter should be faster, in that we can use itervalues() and possibly not have to create/go through the entire values list. In practice, the results were… odd…
In [72]: %%timeit
....: myf = ifilter(lambda x: x[1] == 90000, largedict.iteritems())
....: myf.next()[0]
....:
100 loops, best of 3: 15.1 ms per loop
In [73]: %%timeit
....: myf = ifilter(lambda x: x[1] == 9, largedict.iteritems())
....: myf.next()[0]
....:
100000 loops, best of 3: 2.36 us per loop
So, for small offsets, it was dramatically faster than any previous version (2.36 *u*S vs. a minimum of 1.48 *m*S for previous cases). However, for large offsets near the end of the list, it was dramatically slower (15.1ms vs. the same 1.48mS). The small savings at the low end is not worth the cost at the high end, imho.
В Python мы можем получить значения, присутствующие в словаре, по их ключам. Для этого используется синтаксис dict_name[key_name]
. Но мы не можем таким же образом получить ключ по значению.
В этой статье мы рассмотрим способы, с помощью которых мы можем получить ключ заданного значения в словаре.
Как получить ключ из пары ключ-значение путем перебора элементов словаря
Это самый простой способ извлечь ключ по значению. Мы проверяем каждую пару ключ-значение, чтобы найти ключ, связанный с текущим значением.
Для этой задачи мы будем использовать метод items()
. Этот словарный метод возвращает список кортежей, содержащих пары ключ-значение. В полученном списке мы проверим каждый кортеж, чтобы найти ключ, связанный с нашим значением.
myDict = {"name": "PythonTurbo", "acronym": "PT"} print("Dictionary is:") print(myDict) dict_items = myDict.items() print("Given value is:") myValue = "PT" print(myValue) print("Associated Key is:") for key, value in dict_items: if value == myValue: print(key)
Результат:
Dictionary is: {'name': 'PythonTurbo', 'acronym': 'PT'} Given value is: PT Associated Key is: acronym
Мы создали список элементов в myDict
с помощью myDict.items()
, а затем проверили каждый элемент в списке, чтобы найти ключ для нашего значения.
Как получить ключ по значению с помощью списков
Мы можем создать отдельные списки из ключей и значений, а затем найти ключ нужного значения с помощью метода index()
.
Для этой задачи мы сначала создадим список ключей, имеющихся в словаре, используя метод keys()
. Затем создадим список значений, используя метод values()
. После этого мы получим индекс нужного значения из списка значений с помощью метода index()
.
Мы знаем, что список ключей имеет тот же порядок ключей, что и значения в списке значений. Поэтому индекс значения в списке значений будет таким же, как и индекс связанного с ним ключа в списке ключей. Таким образом, найдя индекс значения в списке значений, мы можем найти ключ в списке ключей по тому же индексу.
Это можно сделать следующим образом:
myDict = {"name": "PythonTurbo", "acronym": "PT"} print("Dictionary is:") print(myDict) dict_keys = list(myDict.keys()) dict_values = list(myDict.values()) print("Given value is:") myValue = "PT" print(myValue) val_index = dict_values.index(myValue) print("Associated key is:") myKey = dict_keys[val_index] print(myKey)
Выходные данные:
Dictionary is: {'name': 'PythonTurbo', 'acronym': 'PT'} Given value is: PT Associated key is: acronym
Как получить ключ по значению с помощью list comprehension
Для получения ключа, связанного с заданным значением, вместо метода index()
можно использовать представление списка. О представлениях списков вы можете почитать в статье “List comprehensions и другие comprehensions в Python”.
Чтобы найти ключ, мы создадим список ключей, значения которых равны заданному значению:
myDict = {"name": "PythonTurbo", "acronym": "PT"} print("Dictionary is:") print(myDict) dict_items = myDict.items() print("Given value is:") myValue = "PT" print(myValue) print("Associated key is:") myKey = [key for key, value in dict_items if value == myValue] print(myKey)
Результат:
Dictionary is: {'name': 'PythonTurbo', 'acronym': 'PT'} Given value is: PT Associated key is: ['acronym']
Заключение
В этой статье мы рассмотрели три способа получить из словаря Python ключ по значению: с помощью list comprehension
, метода items()
и метода index()
.
Перевод статьи Aditya Raj “Get key from value in dictionary“
В этом посте мы обсудим, как искать ключ по его значению в словаре Python.
1. Использование выражения генератора
Простое решение — использовать генераторное выражение для поиска ключа по его значению в словаре. Вот как будет выглядеть код:
if __name__ == ‘__main__’: # создать словарь {‘A’: 65, ‘B’: 66, ‘C’: 67, … , ‘Z’: 90} asciiMap = {chr(_): _ for _ in range(65, 91)} # значение для поиска val = 75 # печатает К print(next(ch for ch, code in asciiMap.items() if code == val)) |
Скачать Выполнить код
2. Использование обратного словаря
Здесь идея состоит в том, чтобы создать словарь пар значение-ключ. Вы можете использовать zip()
для объединения значений и ключей словаря и передачи результата конструктору словаря для получения словаря.
if __name__ == ‘__main__’: # создать словарь {‘A’: 65, ‘B’: 66, ‘C’: 67, … , ‘Z’: 90} asciiMap = {chr(_): _ for _ in range(65, 91)} # значение для поиска val = 75 reverseMap = dict(zip(asciiMap.values(), asciiMap.keys())) print(reverseMap.get(val)) # печатает К |
Скачать Выполнить код
Это предполагает, что в словаре нет двух ключей с одинаковыми значениями, и все значения словаря можно хэшировать. Вы можете упростить код с помощью map()
функция:
if __name__ == ‘__main__’: # создать словарь {‘A’: 65, ‘B’: 66, ‘C’: 67, … , ‘Z’: 90} asciiMap = {chr(_): _ for _ in range(65, 91)} # значение для поиска val = 75 reverseMap = dict(map(reversed, asciiMap.items())) print(reverseMap.get(val)) # печатает К |
Скачать Выполнить код
Это все о поиске ключа по его значению в словаре Python.
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования