如何遍历字典列表修改字典键并保持键的原有顺序?
修改字典键并保持顺序(单个for循环实现)
原始数据
my_dict_1 = {'a': 1, 'b': 2, 'c': 3} my_dict_2 = {'a': 10, 'b': 20, 'c': 30} original_list = [my_dict_1, my_dict_2]
需求
遍历original_list,将每个字典中的键'b'替换为'New',同时保持原有键的顺序,最终得到:
my_dict_1 = {'a': 1, 'New': 2, 'c': 3} my_dict_2 = {'a': 10, 'New': 20, 'c': 30}
尝试的代码及问题
for i in [my_dict_1, my_dict_2]: i['NEW'] = i.pop('b') print(my_dict_1)
输出结果:{'a': 1, 'c': 3, 'NEW': 2},新键'NEW'被放到了字典末尾,没有保持原位置顺序。
解决方案(单个for循环实现)
Python 3.7+的普通字典会保留插入顺序,但直接pop后添加新键会把新键追加到末尾。要保持原位置,需要按原字典的键顺序重新构建字典:
方法一:遍历键值对替换
for d in original_list: # 先保存原字典的键值对,避免修改过程中影响遍历 original_items = list(d.items()) d.clear() for k, v in original_items: # 替换目标键,其余保持原样 d['New' if k == 'b' else k] = v print(my_dict_1) # {'a': 1, 'New': 2, 'c': 3} print(my_dict_2) # {'a': 10, 'New': 20, 'c': 30}
方法二:字典推导式简化
for d in original_list: # 用字典推导式生成新的键值对(保持原顺序) updated_dict = {'New' if k == 'b' else k: v for k, v in d.items()} d.clear() d.update(updated_dict) print(my_dict_1) # {'a': 1, 'New': 2, 'c': 3}
原理说明
直接pop('b')会移除该键,之后添加的'New'键会被视为新插入的键,因此被放到字典末尾。而通过按原字典的键顺序遍历并构建新字典,能保证'New'键处于原'b'键的位置,从而维持整体顺序。
内容的提问来源于stack exchange,提问作者Imran
相关产品推荐
相关产品推荐

