在Python3中如何从字典中调用名称?

在Python3中如何从字典中调用名称?,python,python-3.x,dictionary,call,Python,Python 3.x,Dictionary,Call,假设我有以下词典: mydict = {"3322": 4 , "3323": 3 , "3324": 5} 现在假设我想在用户输入3后打印“3323”。 到目前为止,我得到的是: printer = input("please enter a number: ") 现在我不知道用户输入3后如何使用“打印机”打印3323。首先,您的字典是“向后”的,即您要使用的键实际上存储了一个值,请使用字典理解将其翻转: mydict = {v:k for (k,v) in mydict.iteritem

假设我有以下词典:

mydict = {"3322": 4 , "3323": 3 , "3324": 5}
现在假设我想在用户输入3后打印“3323”。 到目前为止,我得到的是:

printer = input("please enter a number: ")
现在我不知道用户输入3后如何使用“打印机”打印3323。

首先,您的字典是“向后”的,即您要使用的键实际上存储了一个值,请使用字典理解将其翻转:

mydict = {v:k for (k,v) in mydict.iteritems()}
results = [k for k,v in mydict.items() if v == int(printer)]
然后最好在while循环中捕获用户输入:

while 1:
    key = input("please enter a number: ")
    try:
        if int(key) in mydict:
            print mydict[int(key)]
            break
        else:
            print "{n} not present!".format(n = key)
    except ValueError:
        print "please enter a number!"

这样,如果用户出错,他们可以再试一次。

因为您通过相应的值来查找键(必须是唯一的)(可以在字典中重复多次),因此可能会有多个映射到给定值的结果键

幸运的是,我们可以使用列表找到所有键:

mydict = {v:k for (k,v) in mydict.iteritems()}
results = [k for k,v in mydict.items() if v == int(printer)]
当然,你可以像这样把它们全部打印出来:

print('\n'.join(results))

这样,将打印找到的所有键(用换行符分隔),如果没有找到任何键,则不会打印任何键。

要查找匹配值的键。如果有多个键具有相同的匹配值,会发生什么情况?如果没有,会发生什么?这对于Python2是正确的。您必须进行一些小的更改,以便它能够在Python3上工作。此外,这假定没有重复的值。