从dic中的值(列表)获取密钥

时间:2013-10-16 21:07:52

标签: python dictionary key-value

如果值是列表,是否可以从值中检索键:

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)]

但是如果我插入更多元素会给我一个错误,它不在列表中, 如果你想知道我正在创建一个使用类和字典的电话簿,所以我想 给号码别名,也可以更改一个名字上的号码,别名也应该得到新的号码。如果我模糊的话,会对任何帮助表示抱歉

1 个答案:

答案 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方法就是你所需要的。