如何基于另一个字典修改Python字典的键名?
问题:基于映射字典重命名原字典的键
现有一个包含键值对的Python字典,需要根据另一个字典的键值映射来重命名原字典的键,具体示例如下:
原数据字典:
data = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
键映射规则:
key_changes ={'a': 'a1', 'b': 'b1'}
预期输出:
{'a1': 1, 'b1': 2, 'c': 3, 'd': 4}
你尝试用字典推导式解决,但出现了语法错误,错误代码如下:
res = { key_chages[_key]:_value else _key:_value for _key,_value in data.items() if _key in key_chages }
错误原因分析
你的代码存在两个问题:
- 语法错误:字典推导式中不能直接使用
else来拆分键值对结构,正确的做法是对键进行条件处理。 - 数据丢失风险:
if _key in key_chages会过滤掉所有不在映射规则里的键,导致最终结果丢失c、d这类不需要重命名的键。
正确解法
方法1:简洁的字典推导式(推荐)
利用dict.get()方法处理键的替换——该方法会优先从映射字典中取新键,不存在则保留原键,同时保留所有键值对:
res = {key_changes.get(_key, _key): _value for _key, _value in data.items()}
方法2:循环遍历(直观易懂)
如果对推导式不熟悉,也可以用循环逐个处理键值对:
res = {} for key, value in data.items(): new_key = key_changes.get(key, key) res[new_key] = value
两种方法都能得到符合预期的输出结果。
内容的提问来源于stack exchange,提问作者Learn Hadoop
相关产品推荐
相关产品推荐

