使用 'value in dict.values()' 返回字典中找到的值键



有没有一种方法可以使用返回字典中找到的匹配项的密钥

if val in dict.values():
# print the key of the value in the dictionary that matches val

在查找三种不同类型的值时,我尝试使用相同的搜索功能。一个是字母数字,另一个是字符串,第三个是数字。在搜索函数中,我调用上面的代码。在这个函数中,我搜索一个包含这些值的已知集合的字典(这三个集合在一起),试图将从文件中读取的单个值与字典中的这些已知集合相匹配。我有一个搜索顺序(字母数字、字符串、数字)。字母数字和数字条目是一对一的,但已知字典中的字符串条目是一个列表。我一直假设dict.iteritems()不会在字符串列表中搜索未知字符串,但val in dict.values()会。因此使用了后者。

根据哪些匹配(字母数字没有,但数字有,等等),我想返回密钥,以了解传入数据是如何与已知集匹配的。

因此,我没有为每种键类型编写两到三个单独的函数,而是尝试使用棘手的字典代码将其保持为一个。

编辑:

所以,假设我有一本字典:

dict = {'alphaNumeric':'A7', 'number':'36', 'string':['red','green','blue']}

以及这些不完整的值集来搜索:

sets = [['A7','',''],[['','36',''], ['','','green']]

我试图设计一个处理任何搜索的功能:

def searchFun(sets, dict):
    for set in sets:
        for val in sets:
            if val in dict.values():
                return val, #KEY WHERE IT WAS FOUND#

您正在反向使用字典。如果你把他们安排在另一个方向,你会有一个更容易的时间:

my_dict = {'A7':'alphaNumeric', '36':'number', 'red':'string', 'green':'string', 'blue':'string'}
my_queries = ['A7', '', '', '', '36', '', '', '', 'green']

请注意,您的查询列表是一个不规则的多维list,应该进行扁平化(在这个问题的顶部答案中有一个很好的方法——如果需要,您可以调整它以适合您的Python版本)。我已经将其硬编码为平面list来演示查找功能。

现在您可以使用一个干净、简洁的函数:

def searchfun(d, queries):
    return [(key,d[key]) for key in queries if key in d]

结果如下:

>>> searchfun(my_dict, my_queries)
[('A7', 'alphaNumeric'), ('36', 'number'), ('green', 'string')]

还要注意,这类似于OOP,每个对象都有一个可以称为self.classification的属性。

字典经过优化以查找关键字。没有什么好方法可以按价值来查找。你只需要迭代它。

for k, v in dict.iteritems():
    if val == v:
        print k

不,没有。正如@Laizer所建议的,您可以在python3中使用.iteritems(或.items())。但你不能用.values()。您可以返回一个具有该值的密钥:

if val in dict.values():
    for k in dict.keys(): # of just `for x in dict:`
        if val == dict[k]:
             print k

没有直接的方法根据值来识别密钥,因为多个密钥可以具有相同的值,例如

mydict = {'orange': 0, 'red': 1, 'yellow': 2, 'black': 0}
print mydict.keys()[mydict.values().index(0)]

这将返回第一个出现值0键,即'orange'

最新更新