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

2024-05-14 10:06:20 发布

您现在位置:Python中文网/ 问答频道 /正文

如果值是一个列表,是否有方法从值中检索键:

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

如果列表中只有一个元素,则可以执行此操作:

^{pr2}$

但是如果我插入更多的元素,它会给我一个错误,它不在列表中, 如果你想知道我正在用课堂和字典创建一本电话簿,我想 给和别名的号码,也能改变一个名字的号码和别名也应该得到新的号码。如果我模糊不清的话,很抱歉


Tags: the方法nameinselfadd元素number
1条回答
网友
1楼 · 发布于 2024-05-14 10:06:20

如果您发现自己在想“我如何根据密钥的值来查找它?”这通常意味着你的字典走错了方向,或者至少你应该保留两本字典。这是尤其是如果您注意到自己用手确保值是唯一的,则更是如此!在

目前,您的条件永远不会为真(除非self.bok.values()以其他方式更新),因为name是一个字符串,而{}看起来像是一个列表列表。如果姓名在电话簿中只出现一次,这是一个很好的提示,那就是你应该有一本与之相反的字典。在

假设您还需要数字到名称的查找,那么我要做的是向您的类添加另一个字典,并在您添加新的名称/编号对时更新它们。在

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方法就是您所需要的。在

相关问题 更多 >

    热门问题