有没有办法使用以下命令返回字典中找到的匹配项的键:
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#
答案 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