python中dict列表的Topk

2024-06-28 11:39:53 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种简单的方法来执行键:值对在这个例子中

s1 = {'val' : 0}
s2 = {'val': 10}
s3 = {'val': 5}
s4 = {'val' : 4}
s5 = {'val' : 6}
s6 = {'val' : 7}
s7 = {'val' : 3}
shapelets = [s1,s2,s3,s4,s5,s6,s7]

我想得到shapelets列表中最多5个数字,知道它包含一个名为“val”的键,并为其赋值。 这里的解决方案是通过dict元素列表进行解析,并获得它的最大n个数(在本例中是max5个值)

在这样一个简单的操作库中,python可以支持什么操作?在


Tags: 方法列表s3数字val解决方案例子s4
3条回答

您可以使用numpy.argpartition在线性时间内完成:

from operator import itemgetter
import numpy as np
arr = np.array(list(map(itemgetter("val"), shapelets)))

print(arr[np.argpartition(arr, -5)][-5:])

5个最大值不一定是按顺序排列的,如果您想这样做,那么您需要对返回的k个元素进行排序。在

下面是一个有效的例子:

s1 = {'val': 0}
s2 = {'val': 10}
s3 = {'val': 5}
s4 = {'val': 4}
s5 = {'val': 6}
s6 = {'val': 7}
s7 = {'val': 3}
shapelets = [s1, s2, s3, s4, s5, s6, s7]

print(sorted(shapelets, key=lambda x: x['val'])[-5:])

您可以使用^{}

import heapq

s1 = {'val': 0}
s2 = {'val': 10}
s3 = {'val': 5}
s4 = {'val': 4}
s5 = {'val': 6}
s6 = {'val': 7}
s7 = {'val': 3}
shapelets = [s1, s2, s3, s4, s5, s6, s7]

heapq.nlargest(5,[dct['val'] for dct in shapelets])
# [10, 7, 6, 5, 4]

如果您只想要几个最大的值,heapq可能比sorted快,如果您只想要几个最大的值。关于heapq与{}的一些讨论是here。在

相关问题 更多 >