在python中为现有字典添加新别名?

时间:2017-09-25 13:01:54

标签: python dictionary alias

所以我正在尝试添加一个新的“名称”作为字典中现有键的别名。

例如:

dic = {"duck": "yellow"}

userInput = raw_input("Type the *name* and *newname* (alias) here:")

#Somecode that allows me to input newname as an alias to "duck"

用户键入两个单词: name 以引用“duck”, newname 指定应指向现有键值的新键。即别名。 因此,当我更改"duck"的值时,"newname"也应该更改,反之亦然。

我尝试了很多东西,但无法找到一个好方法。

1 个答案:

答案 0 :(得分:5)

此处没有内置功能,但在dict类型的基础上构建起来很容易:

class AliasDict(dict):
    def __init__(self, *args, **kwargs):
        dict.__init__(self, *args, **kwargs)
        self.aliases = {}

    def __getitem__(self, key):
        return dict.__getitem__(self, self.aliases.get(key, key))

    def __setitem__(self, key, value):
        return dict.__setitem__(self, self.aliases.get(key, key), value)

    def add_alias(self, key, alias):
        self.aliases[alias] = key


dic = AliasDict({"duck": "yellow"})
dic.add_alias("duck", "monkey")
print(dic["monkey"])    # prints "yellow"
dic["monkey"] = "ultraviolet"
print(dic["duck"])      # prints "ultraviolet"
如果没有别名,

aliases.get(key, key)会返回key

删除密钥和别名是留给读者的练习。