Python(2.7.8):电话簿,具有相同值的多个键(别名)

时间:2015-10-15 14:54:13

标签: python python-2.7

class Phonebook:

      def __init__(self):
          self.bok={('eddie','ed'): '1234',('peter','pete'): '4321'}

      def add(self, name, number):
          if name in self.bok.keys():                     
             print "The name does already exist."
          else:
             self.bok[name] = number                      
             print self.bok

      def lookup(self, name):
          for item in self.bok.keys():
              if name in item:
                 print "Name :", name
                 print "Telephone number: ", self.bok[item]

      def alias(self, name, nick):
          self.bok[name, nick] = self.bok[name]
          del self.bok[name]

      def change(self, name, number):
          for item in self.bok.keys():
              if name in item:
                 print "test"

所以,我想做的是添加" Alias"选择的名称如下:

  

Alias eddie ed(将别名" ed"添加到名称" eddie")

但问题在于,在我完成之后它会成为字典中的元组,所以我无法使用当前函数为同一个名称添加更多别名,因为它只能起作用对于Dictionary而不是Tuples,如:

  

Alias ed eddinator(将别名" eddinator"添加到名称" ed"它连接到eddie)==>给我错误。

然后出现同样的问题。 更改=别名' es应始终与" head"相同。如果我将eddie的数字更改为9876,那么ed和eddinator也应该拥有它。 (具有相同值的多个键)

查找功能正在运行。 我不确定这是最简单的方法,但它是目前我发现的唯一方式!

1 个答案:

答案 0 :(得分:0)

让别名指向头部名称,头部名称指向电话号码:

class Phonebook:

    def __init__(self):
        self.bok = {'eddie': 1234,
                    'ed': 'eddie',
                    'peter': 4321, 
                    'pete': 'peter'}


    def add(self, name, number):
        if name in self.bok.keys():                     
            print "The name does already exist."
        else:
            self.bok[name] = int(number)
            print self.bok


    def lookup(self, name):
        val = self.bok[name]
        while isinstance(val, str):
            val = self.bok[val]

        print "Name :", name
        print "Telephone number: ", val


    def alias(self, name, nick):
        if nick in self.bok:
            print 'that alias already exists'
            return
        self.bok[nick] = name


    def change(self, name, number):
        while isinstance(self.bok[name], str):
            name = self.bok[name]
        self.bok[name] = int(number)