Python (2.7.8):电话簿,具有相同值的多个键(别名) [英] Python (2.7.8) : Phonebook, Multiple keys with the same value (Alias)

查看:34
本文介绍了Python (2.7.8):电话簿,具有相同值的多个键(别名)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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"

所以,我想做的是将别名"添加到选定的名称中,例如:

So, what I would like to do is add "Alias" to a chosen name like:

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

Alias eddie ed (Adds the alias "ed" to the name "eddie")

但这里的问题是,在我这样做之后,它变成了字典中的元组,所以我不能在当前函数的同名中添加更多别名,因为它只适用于字典而不适用于元组,喜欢:

But the problem here is that it becomes a Tuple in the dictionary after I've done that so I can't add more Alias'es to the same name with the current function because it only works for Dictionary and not Tuples, like:

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

Alias ed eddinator (Adds the alias "eddinator" to the name "ed" wich is connected to eddie) ==> Gives me error.

然后同样的问题出现在 Change 上.Change = 别名应该始终与头部"名称具有相同的编号,因此如果我将 eddie 的编号更改为 9876,那么 ed 和 eddinator 也应该具有它.(具有相同值的多个键)

And then the same problems appears for Change. Change = The alias'es should always have the same number as the "head" name so if I change eddie's number to 9876 then ed and eddinator should also have it. (Multiple keys with same value)

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

The lookup function is working. I'm not really sure this is the easiest way but its currently the only way I've found so far!

推荐答案

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

Have the aliases point to the head names, and the have the head names point to the phone number:

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)

这篇关于Python (2.7.8):电话簿,具有相同值的多个键(别名)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆