HOWTO · Python

在 Python 中更改字典中的鍵

學習如何在保留值不變的情況下重新命名 Python 字典中的一個或多個鍵。

本頁內容

若要重新命名 Python 字典中的鍵,請先將該鍵的值指派給替代鍵,再移除舊鍵。若想在同一個操作中取出並移除舊項目,請使用 dict.pop()。若要進行多項或條件式變更,可以依照舊鍵與新鍵的對應關係建立新字典。這些方法都會保留原有的值;請依照你要更新原字典,還是建立另一個結果來選擇做法。

透過將值指派給新鍵並刪除舊鍵來變更鍵

字典的鍵無法直接就地編輯。若要簡單地重新命名,請使用舊鍵讀取值,將值指派給新鍵,再刪除舊項目:

fruit = {"A": "Apple", "B": "Banana"}
fruit["C"] = fruit["B"]
del fruit["B"]
print(fruit)

這會將 B 改為 C,並保留值 "Banana"。此操作會直接更新 fruit。如果 C 已經存在,指派時會取代它目前的值;若資料需要保留該值,請先確認目標鍵尚未存在。

使用 dict.pop() 變更鍵

dict.pop() 會移除指定的鍵並傳回它的值。你可以直接將該值指派給替代鍵:

person = {"first_name": "John", "last_name": "Doe", "age": 30}
person["given_name"] = person.pop("first_name")

指派後,person 會有一個 given_name 鍵,其值是原本 first_name 的值。與直接指派一樣,如果 given_name 已經存在,它的值會被取代。如果舊鍵可能不存在,可以為 pop 提供預設值,例如 person.pop("first_name", None);否則,對不存在的鍵呼叫它會引發 KeyError。

透過重建字典來變更一個或多個鍵

若要重新命名多個鍵或依條件重新命名,請建立舊鍵到替代鍵的對應表,再使用字典推導式。未列在對應表中的鍵會維持不變:

original = {"a": 1, "b": 2, "c": 3}
key_mapping = {"a": "alpha", "b": "beta"}
renamed = {key_mapping.get(key, key): value for key, value in original.items()}

在此,renamed 會包含 alpha、beta 和 c,並保留它們原本的值。推導式會建立新字典,因此 original 仍可保留原樣。如果兩個來源鍵對應到同一個目標鍵,推導式中較晚指派的值會取代較早的值。若必須保留每個值,請確保對應結果中的鍵彼此不同。當重新命名規則需要套用至每個鍵,或需要一次變更多個已知名稱時,這種做法特別實用。如果原始資料中有可能轉換成相同名稱的鍵,請在重建前檢查對應表。

這種方法也適用於條件式轉換:將 key_mapping.get(key, key) 換成能為每個項目傳回所需鍵的運算式。針對要處理的資料,鍵運算式應有確定的結果;產生的鍵也必須可雜湊,因為字典鍵必須符合這項要求。

當字典鍵代表表格資料時重新命名 DataFrame 欄位

如果字典鍵是表格資料集中的欄名,請使用 DataFrame.rename(columns=...) 重新命名欄位。從字典建立 DataFrame 不會重新命名原字典中的鍵;它會建立另一個表格物件。例如,可以這樣操作:df = df.rename(columns={"a": "alpha"})。這會傳回欄位已重新命名的 DataFrame,且不會更動來源字典。如果你需要將結果轉回字典,當值是欄位清單時,請選擇明確的方向,例如 df.to_dict(orient="list")。這項 Pandas 專用操作需要你的環境中已安裝 Pandas。對一般字典而言,內建的指派、dict.pop() 或推導式方法不必轉換資料結構,通常是較簡單的選擇。