的Python類型的字典是哈希表,這就是爲什麼所有可變內置類型是unhashable,不能被用作密鑰(或者用於此事的set
元素)。雖然您可以創建自己的可變哈希類型,但修改插入的鍵將會破壞查找表。這基本上意味着你唯一的選擇就是爲你想要修改的每一個插入一個新的密鑰,並且(可選地)刪除以前的版本。除非您有預定義的一組密鑰進行修改,否則需要花費O(N)時間(其中N是字典中的密鑰數)和O(1)額外空間(如果您移除舊密鑰)執行此操作。您還可以使用擴展的字典,理解內部要簡練,避免可能產生的副作用,這將創建一個新的字典
In [1]: d = {
...: ('Live', '2017-Jan', '103400000', 'Amount'): 30,
...: ('Live', '2017-Feb', '103400000', 'Amount'): 31,
...: ('Live', '2017-Mar', '103400000', 'Amount'): 32,
...: ('Live', '2017-Jan', '103401000', 'Amount'): 34
...: }
In [2]: {(x.replace("Live", "Live1"), *xs): value for (x, *xs), value in d.items()}
Out[2]:
{('Live1', '2017-Feb', '103400000', 'Amount'): 31,
('Live1', '2017-Jan', '103400000', 'Amount'): 30,
('Live1', '2017-Jan', '103401000', 'Amount'): 34,
('Live1', '2017-Mar', '103400000', 'Amount'): 32}
或在這個非常特殊的情況下(即當更換所有的鍵是相同的) :
In [3]: {("Live1", *xs): value for (_, *xs), value in d.items()}
Out[3]:
{('Live1', '2017-Feb', '103400000', 'Amount'): 31,
('Live1', '2017-Jan', '103400000', 'Amount'): 30,
('Live1', '2017-Jan', '103401000', 'Amount'): 34,
('Live1', '2017-Mar', '103400000', 'Amount'): 32}
這將帶您O(N)時間和O(N)空間。
你不能真正「替換」一個鍵,你必須得到一個引用的值,刪除舊的鍵,然後用新密鑰重新插入值。 – jonrsharpe
您可以使用示例詞典顯示您的操作的預期結果嗎? –
此外,考慮到字符串和元組是不可變的。 –