如何在python字典中获取值的键?

如何在python字典中获取值的键?,python,dictionary,Python,Dictionary,字典值是列表: dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]} 如何从python中的字典1中获取5的键,即“DEF” my_value = 5 for k, v in dictionary_1.iteritems(): if my_value in v: print k break else: print "No key, defaulting to GHJ" 演示: 也许是这样 my_value

字典值是列表:

dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]}
如何从python中的
字典1
中获取
5
的键,即
“DEF”

my_value = 5
for k, v in dictionary_1.iteritems():
    if my_value in v:
        print k
        break
else:
    print "No key, defaulting to GHJ"
演示:

也许是这样

my_value = 5
for k, v in dictionary_1.iteritems():
    if my_value in v:
        print k
        break
else:
    print "No key, defaulting to GHJ"
演示:


您必须在字典中搜索:

try:
    key = next(k for k, v in dictionary_1.iteritems() if 5 in v)
except StopIteration:
    raise KeyError('Key for 5 not found')
这假设您正在查找一个键。要查找所有键,可以使用列表:

keys = [k for k, v in dictionary_1.iteritems() if 5 in v]

列表可能为空。

您必须在字典中搜索:

try:
    key = next(k for k, v in dictionary_1.iteritems() if 5 in v)
except StopIteration:
    raise KeyError('Key for 5 not found')
这假设您正在查找一个键。要查找所有键,可以使用列表:

keys = [k for k, v in dictionary_1.iteritems() if 5 in v]
列表可能为空。

一种方法是:

dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]}
for k, v in dictionary_1.items():
    if 5 in v:
        print(k)
一种方法是:

dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]}
for k, v in dictionary_1.items():
    if 5 in v:
        print(k)
您可以创建反向dict:

您可以创建反向dict:


假设您可以检查[4,5,6]列表中是否有5,您也可以尝试:

dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]}

print dictionary_1.keys()[dictionary_1.values().index([4,5,6])] 

假设您可以检查[4,5,6]列表中是否有5,您也可以尝试:

dictionary_1 = {"ABC": [1,2,3], "DEF":[4,5,6]}

print dictionary_1.keys()[dictionary_1.values().index([4,5,6])] 


您的意思是您输入了
5
,并且希望返回
“DEF”
?或者反过来呢?你可能想使用一个双向字典:@lc。是的,我有
5
,我想得到它的密钥(id为“DEF”)。@simonzack该问题的答案看起来不像下面发布的答案。因为它们不是重复的。@alwbtc:但它们是密切相关的。也检查侧边栏中的链接帖子。您的意思是您有一个
5
的输入,并且希望返回
“DEF”
?或者反过来呢?你可能想使用一个双向字典:@lc。是的,我有
5
,我想得到它的密钥(id为“DEF”)。@simonzack该问题的答案看起来不像下面发布的答案。因为它们不是重复的。@alwbtc:但它们是密切相关的。也请检查侧栏中的链接帖子。如果值是唯一的。这是一个不错的选项,因为op希望默认为键
GHJ
(在对我答案的评论中)。所以只要调用
d.get(5,“GHJ”)
,只要值是唯一的。这是一个很好的方法,因为op希望默认为键
GHJ
(在我回答的注释中)。所以您可以调用
d.get(5,“GHJ”)
如果在字典中找不到项,那么它应该返回一个默认值,如“GHJ”。“你会怎么做?”alwbtc更新了我的答案。这是for/else模式,如果找不到键,代码将永远不会
中断
,并且执行
else
子句。如果在字典中找不到项,则它应该返回一个默认值,如“GHJ”。“你会怎么做?”alwbtc更新了我的答案。这是for/else模式,如果找不到键,代码将永远不会
break
,并且执行
else
子句。没有见过这样使用
next
。。谢谢。@alwbtc:如果您想要默认值,请使用
key=next((k代表k,v代表d.iteritems()如果9代表v),'GHJ'))
并删除try..except。还没有看到以这种方式使用
next
谢谢。@alwbtc:如果需要默认值,请使用此
key=next((k代表k,v代表d.iteritems(),如果9代表v),'GHJ')
并删除try..except。