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循环中将其解构为key
和value
。然后,对于每次迭代,我们将其与我们正在搜索的值进行比较,如果它是正确的值,则返回键。如果没有找到,则返回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