我试图搜索一个值,并得到它的键作为输出

  • 本文关键字:输出 图搜索 一个 python
  • 更新时间 :
  • 英文 :

a = {1897:("Diptojit", "Sealdah", 9000000001),
2224:("Debanjan", "Tarakeshwar", 9000000002),
1758: ("Avinesh", "Metropolitan", 9000000003),
2283: ("Biswajit", "Garia", 9000000004)}
n = input("Enter name to know index : ")
lk = list(a.keys())
lv = list(a.values())
#print(lv[0])
for i in range(0,4):
if n == "('Biswajit', 'Garia', 9000000004)":
print(lk[lv.index(n)])
break

我试图搜索一个值,并得到它的键作为输出。这个程序不显示任何输出,而对于一个简单的字典,当所有键只有一个值时,这段代码可以完美地工作。请帮助。

您可以这样做:

import ast
...
...
for i,j in a.items():
if ast.literal_eval(n) == j:
print(i)

ast.literal_eval安全地计算元组,因为它是元组的字符串表示。然后压缩包含键和值的列表,然后检查它是否等于j

您可以遍历字典中的每个键值对,如果值与您正在查找的值匹配,则返回键。方法dict.items()返回一个键值对数组,我们可以迭代数组来找到我们想要的值。

,

def get_key_from_value(d, search_value): 
for key, value in d.items(): # (("a", 1), ("b", 2), ("c", 3))
if value == search_value: 
return key
return None
d = {"a": 1, "b": 2, "c": 3} 
search_value = 2
key = get_key_from_value(d, search_value) # returns "b"

编辑:

dict.items()返回一个键值对数组,然后我们在for循环中将其解构为keyvalue。然后,对于每次迭代,我们将其与我们正在搜索的值进行比较,如果它是正确的值,则返回键。如果没有找到,则返回None

了解更多python解构:https://blog.teclado.com/destructuring-in-python/

使用ast.literal_eval()eval()(首选前者[阅读原因],尽管后者是标准库的一部分)将输入转换为元组和匹配对象。看看下面这段代码:

a = {1897:("Diptojit", "Sealdah", 9000000001),
2224:("Debanjan", "Tarakeshwar", 9000000002),
1758: ("Avinesh", "Metropolitan", 9000000003),
2283: ("Biswajit", "Garia", 9000000004)}
try: n = eval(input("Enter name to know index : ")) # converts input string to tuple for matching.
except: print("Invalid input format.")
for idx, details in a.items():
if n == details:
print(idx)
break

我已经修改了你的代码逻辑,以适用于广义输入。

示例输入:Enter name to know index : ("Avinesh", "Metropolitan", 9000000003)

输出示例:1758