在python中添加一个新的别名到现有的字典?

问题描述:

所以我试图添加一个新的“名称”作为字典中的现有密钥的别名。在python中添加一个新的别名到现有的字典?

例如:

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" 

用户键入两个字:名称引用“鸭”,和NEWNAME应该指向现有键的值的新的密钥。即别名。 因此,当我更改"duck"的值时,"newname"也应该改变,反之亦然。

我已经尝试了很多东西,但无法弄清楚这样做的好方法。

+0

为什么你想要用户输入任意名称,然后使用该名称作为变量? – Vinny

+0

用户应输入名称,因为:“name”是“newname”应该指向的别名。所以用户可以输入:鸭子塑料。现在塑料也应该指的是“黄色”值。 – Alvarsson

+0

所以'name'是现有的密钥,'newname'是插入到字典并指向相同值的新密钥? – Vinny

有没有内置此功能,但它是很容易建立在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不变,如果没有别名它。

处理删除密钥和别名是读者的一个练习。

+0

这看起来很优雅;使用别名字典对原始密钥是一个很好的解决这个问题 – Vinny