有没有一种方法可以使用返回字典中找到的匹配项的密钥
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'