Python字典排序:按键与按值排序的多种实现方式
本文详解Python中字典排序的多种实现方法。重点介绍如何使用内置sorted函数结合lambda表达式分别实现按键和按值排序,对比keys()、items()及map映射等技巧的性能差异,并提供完整代码示例与注意事项,帮助开发者高效处理无序字典数据。
Python字典排序概述
字典排序
在程序开发中,字典常用于数据统计,但因其无序特性,直接打印输出时内容顺序随机。为了更直观地展示统计结果,通常需要对字典进行排序处理。Python提供了两种主要的排序维度:按“键”排序和按“值”排序。
按值排序实现
按“值”排序
若需根据字典的值进行排序,可以利用Python内置的sorted()函数来实现。
sorted(iterable[, cmp[, key[, reverse]]])
- iterable:指定可迭代对象;
- cmp:定义比较函数,比较逻辑由key参数决定,默认值为None,作用于迭代集合中的每一项;
- key:指定用于提取比较键值的函数或属性,默认值为None,作用于迭代集合中的每一项;
- reverse:控制排序方向,设置为True为降序,False为升序,默认值为False(升序)。
返回值:返回一个经过排序的可迭代对象,类型与输入的iterable一致。通常情况下,cmp和key参数可以通过lambda表达式来简化定义。
对字典进行排序时,常用的调用形式如下:
sorted(dict.items(), key=lambda e:e[1], reverse=True)
其中,e代表dict.items()返回的单个元素,e[0]表示按键排序,e[1]则表示按值排序。参数reverse=False可以省略,默认即为升序排列。
说明:字典的items()方法返回的是一个列表,列表中的每个元素是由键和值组成的元组。因此,sorted(dict.items(), key=lambda e:e[1], reverse=True)返回的结果同样是一个由元组构成的列表。
示例:
x=[4,6,2,1,7,9,4]
y=x[:]
y.sort()
print x
print y
输出结果如下:
[4, 6, 2, 1, 7, 9, 4]
[1, 2, 4, 4, 6, 7, 9]
说明:调用x[:]可以得到包含x所有元素的分片,这是一种高效复制整个列表的方法。若通过y=x直接将x赋值给y,则无效,因为这会使x和y指向同一个列表对象。
按键排序实现
按“键”排序
对字典进行按键排序同样可以使用上述sorted函数,只需将参数改为sorted(dict.items(), key=lambda e:e[0], reverse=True)即可。此外,还有另一种方法:通过先对键列表进行排序,再根据排序后的键从原字典中取值,从而实现字典的有序化。
涉及知识点:字典的keys()函数返回一个包含所有键的列表,对该列表进行排序即可。列表排序可使用列表的sort()方法,详细内容可参考列表排序相关文档。
排序方法总结与对比
总结:
方法1:最简单的方法是排列元素(key/value对),然后提取值。字典的items方法会返回一个元组列表,每个元组包含一对键与对应的值。此时可使用sort()方法进行排序。
def sortedDictValues1(adict):
items = adict.items()
items.sort()
return [value for key, value in items]
方法2:使用排列键(key)的方式提取值,速度通常比方法1快。字典对象的keys()方法返回字典中所有键组成的列表,顺序是随机的。排序时只需对返回的键列表使用sort()方法。
def sortedDictValues1(adict):
keys = adict.keys()
keys.sort()
return [adict[key] for key in keys]
方法3:通过映射方法更高效地执行最后一步。
def sortedDictValues1(adict):
keys = adict.keys()
keys.sort()
return map (adict.get,keys )
方法4:对字典按键排序,以元组列表形式返回,同时使用lambda函数进行排序;
sorted(iterable[, cmp[, key[, reverse]]]
cmp和key一般使用lambda
示例:
>>> d={"ok":1,"no":2} #对字典按键排序,用元组列表的形式返回
>>> sorted(d.items(), key=lambda d:d[0])
[('no', 2), ('ok', 1)] #对字典按值排序,用元组列表的形式返回
>>> sorted(d.items(), key=lambda d:d[1])
[('ok', 1), ('no', 2)]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













