根据匹配值从字典返回键

时间:2020-06-03 17:11:19

标签: python-3.x dictionary

我刚刚开始使用Python处理字典,并且可以帮助创建一个使用字典并接受用户输入以返回基于值匹配的键的程序。

这个想法是用户提供一个已经是字典中键的键名。返回的是字典中其他键的名称,这些键的值与搜索到的键的值匹配。这些值被组织到字典中的列表中,并且所有内容都是一个字符串。

我知道这将涉及一个循环,下面是我尝试的未成功的事。


UsStrain = ""

Tru_Strains = {

        'STA' : ['a', 'b', 'c'], 
        'SD' : ['a', 'b', 'f'], 
        'GDP' : ['b', 'c', 'g'], 
        'MBR' : ['a', 'b', 'c'], 
        'BAK' : ['a', 'b', 'c']
}



for Stains in Tru_Strains:

    UsStr = input("Enter a strain: ")

    print(Tru_Strains[UsStr])

例如: 如果用户输入键“ STA”作为输入,则将返回键MBR和BAK,因为它们的值完全匹配。任何见解都会有所帮助。

2 个答案:

答案 0 :(得分:0)

此代码可以正常工作(在线性时间内工作):

userInput = input("Enter a string: ")    # this is what the user enters
output = []    # output list

for key in Tru_Strains.keys():
    if(key != userInput and Tru_Strains[key] == Tru_Strains[userInput]):    # condition to check equality
        output.append(key)
print(output)    # this is the list containing your expected answer

答案 1 :(得分:0)

您可以使用列表推导。

    print([k for k in Tru_Strains
           if Tru_Strains[k] == Tru_Strains[UsStr] and k != UsStr])

如果它是一个大型词典,则可能值得首先在用户提供的键上进行查找并将其存储在变量中,因为它在循环的每次迭代中的计算结果都相同:

    val = Tru_Strains[UsStr]
    print([k for k in Tru_Strains
           if Tru_Strains[k] == val and k != UsStr])

在这里,在Tru_Strains上的迭代等效于在Tru_Strains.keys()上的迭代。