繁体   English   中英

从元组列表中获取前5名-Python

[英]Get top 5 largest from list of tuples - Python

我有一个这样的元组列表(从带有sqlite3的select语句生成):

itemsAndQtyBought = [('Item no.1', 3), ('Item no.2', 0), ('Item no.3', 3), ('Item no.4', 2), ('Item no.5', 1), ('Item no.6', 9), ('Item no.7', 7)]

并且清单继续进行。 这是一个元组列表,它具有产品名称和该产品的购买数量。

我需要从该元组列表中创建前5个项目的元组注释列表,其中5个项目的购买量最高。

例如,上面的列表将显示如下:

newItemsQtyBought = [('Item no.6', 9), ('Item no.7', 7), ('Item no.3', 3), ('Item no.1', 3), ('Item no.4', 2)]

有什么办法吗?

感谢您的回答。

只需使用已排序并切片前5个项目:

In [170]: sorted(itemsAndQtyBought, key=lambda t: t[1], reverse=True)[:5]
Out[170]:
[('Item no.6', 9),
 ('Item no.7', 7),
 ('Item no.1', 3),
 ('Item no.3', 3),
 ('Item no.4', 2)]

您可以使用heapq.nlargest()

from heapq import nlargest
from operator import itemgetter

nlargest(5, my_list, key=itemgetter(1))

heapq.nlargest(n,可迭代[,键])

从iterable定义的数据集中返回包含n个最大元素的列表。 key (如果提供)指定一个参数的功能,该参数用于从iterable中的每个元素中提取比较键: key=str.lower等效于: sorted(iterable, key=key, reverse=True)[:n]

输出:

>>> my_list = [('Item no.1', 3), ('Item no.2', 0),
...            ('Item no.3', 3), ('Item no.4', 2),
...            ('Item no.5', 1), ('Item no.6', 9),
...            ('Item no.7', 7)]
>>>
>>> nlargest(5, my_list, key=itemgetter(1))
[('Item no.6', 9), ('Item no.7', 7), ('Item no.1', 3), ('Item no.3', 3), ('Item no.4', 2)]
sorted(itemsAndQtyBought, key=lambda item: item[1], reverse=True)[:5]

输出:

[('Item no.6', 9), ('Item no.7', 7), ('Item no.1', 3), ('Item no.3', 3), ('Item no.4', 2)]

唯一的缺点:它将整个列表排序

希望对您有帮助

from operator import itemgetter

def newItem(oldItem):
        newItemQtyBought = sorted(oldItem,key=itemgetter(1))
        return newItemQtyBought[-5:]

def main():
        itemsAndQtyBought = [('Item no.1', 3), ('Item no.2', 0), ('Item no.3', 3), ('Item no.4', 2), ('Item no.5', 1), ('Item no.6', 9), ('Item no.7', 7)]
        print(newItem(itemsAndQtyBought))

if __name__=="__main__":
        main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM