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

Alv*_*son 0 python alias dictionary

所以我试图添加一个新的"名称"作为字典中现有键的别名.

例如:

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"
Run Code Online (Sandbox Code Playgroud)

用户键入两个单词:name表示引用"duck",newname 表示应指向现有键值的新键.即别名.所以,当我改变值"duck""newname"应该改变过,反之亦然.

我已经尝试了很多东西,但无法找到一个很好的方法来做到这一点.

jas*_*per 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"
Run Code Online (Sandbox Code Playgroud)

aliases.get(key, key)key如果没有别名,则返回不变的.

处理删除键和别名是读者的练习.

  • 这看起来很优雅;使用别名 dict 到原始键是解决这个问题的一个很好的方法 (2认同)