毕设数据处理记录:python从字典中找出前n个累加和大于某阈值的解决方法

python从字典中找出前n个累加和大于某阈值的解决方法

问题背景:

最近在做硕士毕业大论文的数据处理等工作,其中需要从一个经过降序排列的excel中的topic、value两列找出累加和大于设定阈值的前n项所对应的topic项

表格如下:

输出文件是一个DataFrame类型
输出文件是一个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的操作处理,注意好每个循环的功能即可

参考文章链接:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值