我试图搜索一个值,并将其键作为输出

2024-06-16 13:12:06 发布

您现在位置: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

我试图搜索一个值,并将其键作为输出。这个程序不显示输出,而对于一个简单的字典,当所有键只有一个值时,这个代码工作得很好。 请帮忙


Tags: inputindexlistprintenterlklvmetropolitan
3条回答

您可以迭代字典中的每个键值对,如果该值与正在查找的值匹配,则返回该键。方法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()(前者是首选[read why],尽管后者是标准库的一部分)将输入转换为元组并匹配对象。请查看以下代码:

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

您可以执行以下操作:

import ast
...
...

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

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

相关问题 更多 >