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() 或推导式即可避免转换数据结构,通常也更简单。