如何在Python字典中仅反转值的顺序而不改变原有键的顺序
Python保留键顺序反转字典值的最优实现
Python 3.7及以上版本的标准字典默认保留插入时的键顺序,低于该版本需使用collections.OrderedDict保证键顺序,实现逻辑一致。
核心最简实现
核心逻辑为直接提取原有顺序的键序列、反转值序列后重新配对,时间复杂度为O(n),是效率最高的实现:
dictionnary = {'a': 3, 'b': 2, 'c': 1} # 直接生成反转值的新字典,不修改原字典 inversed_values = dict(zip(dictionnary.keys(), reversed(dictionnary.values()))) print(inversed_values) # 输出:{'a': 1, 'b': 2, 'c': 3}
实现自定义reverseValues()方法
如果需要和示例中一致通过字典方法调用,可以继承原生dict实现子类:
class CustomDict(dict): def reverseValues(self): """返回值顺序反转、键顺序不变的新字典""" return CustomDict(zip(self.keys(), reversed(self.values()))) # 使用示例 dictionnary = CustomDict({'a': 3, 'b': 2, 'c': 1}) inversed_values = dictionnary.reverseValues() print(inversed_values) # 输出:{'a': 1, 'b': 2, 'c': 3}
注意事项
- 上述实现默认返回新字典,不会改动原字典内容,如果需要原地修改原字典,可以遍历键按索引赋值:
vals = list(dictionnary.values()) vals_reversed = vals[::-1] for idx, k in enumerate(dictionnary.keys()): dictionnary[k] = vals_reversed[idx]
- 3.6及更低版本Python请使用
collections.OrderedDict替换示例中的原生dict,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Ramanujan
相关产品推荐
相关产品推荐

