【问题标题】:Returning keys from dictionary based on matching values根据匹配值从字典中返回键
【发布时间】:2020-06-03 17:11:19
【问题描述】:

我刚开始在 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,因为这些值是完全匹配的。任何见解都会有所帮助。

【问题讨论】:

标签: python-3.x dictionary


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用列表推导。

        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() 上的迭代。

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 2019-06-26
      • 2023-03-14
      相关资源
      最近更新 更多