Python取top N相关的模块:heapq模块

本文介绍了Python heapq模块用于取列表和字典top N元素的方法,包括按列表值和字典key、value取最大/最小元素。示例代码展示了如何在Linux环境下运行。
摘要由CSDN通过智能技术生成

Python取top N相关的模块:heapq模块

原文:【Python】Python取top N相关的模块:heapq模块_小怪孩的成长之路-CSDN博客_python 取top

最近在程序中需要取一个列表的top 3元素,就是去一个列表中数值最大的3个元素。这可以用Python的heapq模块来处理。

1、对列表取top N:

现在有一个列表myList,需要取出该列表的最大3个元素和最小3个元素,按如下代码所述的简单例子:

test.py

import heapq

myList = [5, 2, 6, 12, 7, 3, 4, 9]

topNum = 3

nlargestList = heapq.nlargest(topNum, myList) #取最大3个元素

nsmallestList = heapq.nsmallest(topNum, myList) #取最小3个元素

print nlargestList #输出结果

print nsmallestList

我是在Linux环境下,输入:python test.py,就可以运行程序了。

输出结果:

[12, 9, 7]

[2, 3, 4]


没错,这也可以用排序来获得,但是对另外一些情况,排序就比较麻烦了,比如对字典取top N的时候,因为其本身就是无序的,即使排序也不会改变元素在字典中的位置。

2、对字典取top N:

2.1 按字典的key值取top N:

现在有一个字典,想按字典的key值取key值最大的3个元素和key值最小的3个元素,如下代码是一个简单的例子:

test.py

 import heapq


myDict = {1:'a', 3:'d', 8:'g', 5:'m', 9:'t', 4:'s', 2:'u'} #定义一个字典

topNum = 3

nlargestList = heapq.nlargest(topNum, myDict.keys()) #取key值最大的3个元素

nsmallestList = heapq.nsmallest(topNum, myDict.keys()) #取key值最小的3个元素

for key in nlargestList: #输出结果

print key,myDict[key]

for key in nsmallestList:

print key,myDict[key]

我是在Linux环境下,输入:python test.py,就可以运行程序了。

输出结果:

9 t
8 g
5 m
1 a
2 u
3 d

从结果可以看出,确实符合要求。

2.2 按字典的value值取top N:

现在有一个字典,想按字典的value值取value值最大的3个元素和value值最小的3个元素,如下一个简单的例子:

test.py

 import heapq


myDict = {1:'a', 3:'d', 8:'g', 5:'m', 9:'t', 4:'s', 2:'u'}

topNum = 3

nlargestList = heapq.nlargest(topNum, myDict.values()) #取value值最大的3个元素,注意与上一程序区别

nsmallestList = heapq.nsmallest(topNum, myDict.values()) #取value值最小的3个元素,注意与上一程序区别

for value in nlargestList: #输出结果

for key in myDict:

if myDict[key] == value:

print key,myDict[key]

for value in nsmallestList: #输出结果

for key in myDict:

if myDict[key] == value:

print key,myDict[key]

我是在Linux环境下,输入:python test.py,就可以运行程序了。

输出结果:

2 u
9 t
4 s
1 a
3 d
8 g

从结果可以看出,确实符合要求。

希望对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值