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

时间:2015-11-22 07:37:21

标签: python dictionary

有没有办法使用以下命令返回字典中找到的匹配项的键:

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#

4 个答案:

答案 0 :(得分:2)

您正在向后使用词典。如果您将它们安排在另一个方向,您将会有更轻松的时间:

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

请注意,您的查询列表(不规则的多维list)应该展平(the top answer in this question中有一个很好的方法 - 您可以调整它以适合您的版本如果有必要的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的属性。

答案 1 :(得分:0)

字典经过优化,可以找到密钥。没有很好的方法来查看价值。你只需要迭代它。

error: the following arguments are required: --file

答案 2 :(得分:0)

不,没有。正如@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

答案 3 :(得分:0)

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

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

这将返回第一个出现值为0

'orange'animation-duration