python从字典中找出前n个累加和大于某阈值的解决方法
问题背景:
最近在做硕士毕业大论文的数据处理等工作,其中需要从一个经过降序排列的excel中的topic、value两列找出累加和大于设定阈值的前n项所对应的topic项
表格如下:
输出文件是一个DataFrame类型,有三列数据,分别为[‘author’,‘topic’,‘value’]
现在就要把value列数值累加和大于0.8(设定的阈值)所对应的topic取出来,并且放到一个列表中,供后续数据处理任务使用。
直接上代码:
# 定义一个函数,该函数实现了对数值的降序排列,并且将累加和大于阈值的对应topic项取到的功能
def order_dict(dicts, n):
result = []
result1 = []
result2 = []
r_sum = 0
p = sorted([(k, v) for k, v in dicts.items()], reverse=True) #对字典降序处理
s = set()
for i in p:
s.add(i[1]) #把 p字典中每个键值对的value值拿到
for i in sorted(s, reverse=True)[:]:
for j in p:
if j[1] == i:
result.append(j)
for r in result:
r_sum += r[1]
result1.append(r[0])
result2.append(r[1])
if r_sum > n: #这里把累加和大于阈值的前n项取出来,并且达到该条件就立刻跳出循环
break
return result1,result2
输出函数结果看一下:
print(order_dict(results,0.8))
对应的topic项
对应的value值
[0.245762711864406, 0.144067796610169, 0.144067796610169, 0.0762711864406779, 0.0762711864406779, 0.059322033898305, 0.0423728813559322, 0.0423728813559322]
总结:
主要是对字典key,value的操作处理,注意好每个循环的功能即可
参考文章链接: