1

如果值是列表,有没有办法从值中检索键:

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

但是,如果我插入更多元素会给我它不在列表中的错误,如果你想知道我使用类和字典创建电话簿,那么我应该给号码和别名,并且还能够更改号码一个名字和别名也应该得到新的号码。如果我很模糊,会给予任何帮助抱歉

4

1 回答 1

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

于 2013-10-16T21:13:03.580 回答