2017-09-25 17 views
0

所以我試圖添加一個新的「名稱」作爲字典中的現有密鑰的別名。在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

回答

4

有沒有內置此功能,但它是很容易建立在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

相關問題