Python 3.10中如何按引用对字典进行排序?
问题出在你在SortDict函数里的赋值操作——d = dict(sorted(d.items()))只是把函数内部的局部变量d指向了一个新的排序后字典,并没有修改传入的原字典对象。
虽然字典是可变类型,参数传递是传对象引用,但当你给局部变量d重新赋值时,它就和外部的字典断开了关联,原字典自然不会有变化。
下面是两种可行的解决方法:
方法一:原地修改原字典
直接在传入的字典对象上进行操作,先保存排序后的键值对,再清空原字典并更新内容:
def SortDict(d): # 先获取排序后的键值对,避免清空字典后丢失数据 sorted_items = sorted(d.items()) d.clear() d.update(sorted_items)
这样修改后,原字典会被直接更新为排序后的状态,调用SortDict(d)后外部的d就会是按键升序排列的。
方法二:返回新字典并在外部替换
如果不想修改原字典,可以让函数返回排序后的新字典,在主函数里重新赋值:
def SortDict(d): return dict(sorted(d.items())) # 在main函数里调用时修改为: d = SortDict(d)
这种方式更符合函数式编程的风格,不会对原对象产生副作用。
修改后的完整代码(以方法一为例)运行后,输出会变成:
{} {0: 'a', 4: 'b', 2: 'c', 1: 'd'} {0: 'a', 1: 'd', 2: 'c', 4: 'b'}
内容的提问来源于stack exchange,提问作者Runsva
相关产品推荐
相关产品推荐

