如果值是列表,是否可以从值中检索键:
def add(self, name, number):
if name in self.bok.values():
print 'The name alredy exists in the telefonbok.'
else:
self.bok.update({number: []})
self.bok[number].append(name)
print self.bok
如果列表中只有一个元素,则此方法有效:
self.bok.keys()[self.bok.values().index(my value i want to get the corresponding key)]
但是如果我插入更多元素会给我一个错误,它不在列表中, 如果你想知道我正在创建一个使用类和字典的电话簿,所以我想 给号码别名,也可以更改一个名字上的号码,别名也应该得到新的号码。如果我模糊的话,会对任何帮助表示抱歉
答案 0 :(得分:0)
如果您发现自己想知道“我如何通过其价值查找密钥?”它通常意味着你的字典走错了路,或者至少你应该保留两本字典。如果你发现自己确保这些值是独一无二的,那么尤为为真!
目前,您的条件永远不会成立(除非self.bok.values()
以其他方式更新),因为name
(大概)是一个字符串,而self.bok.values()
看起来像是一个列表名单。如果名字只出现在电话簿中,那么这是一个很好的提示,你应该让字典向相反的方向发展。
假设您还需要数字到名称查找,我会做的是在您的类中添加另一个字典,并在添加新名称/数字对时更新它们。
import collections # defaultdict is a very nice object
# elsewhere, presumably in the __init__ method
self.name_to_number = {}
self.number_to_names = collections.defaultdict(list)
def add(self, name, number):
if name in self.name_to_number:
print 'The name alredy exists in the telefonbok.'
else:
self.name_to_number[name] = number
self.number_to_names[number].append(name)
如果你因为某种原因不知所措,那么Óscar López's answer中的findByValue
方法就是你所需要的。