python – 删除范围存储桶中的数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 删除范围存储桶中的数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1270字,纯文字阅读大概需要2分钟。
内容图文
![python – 删除范围存储桶中的数据](/upload/InfoBanner/zyjiaocheng/785/70099beeb1da4b20abc61bbe11924335.jpg)
我有二维数据存储在元组的排序列表中,如下所示:
data = [(0.1,100), (0.13,300), (0.2,10)...
每个元组中的第一个值(X值)仅对元组列表出现一次.换句话说,0.1等只能有一个值.
然后我有一个排序列表的桶.存储桶定义为包含范围和ID的元组,如下所示:
buckets = [((0,0.14), 2), ((0.135,0.19), 1), ((0.19,0.21), 2), ((0.19,0.24), 3)...
范围相对于X轴.因此,id 2上面有两个桶,id 1和3分别只有一个桶. id 2的第一个桶的范围是0到0.14.请注意,水桶可以重叠.
因此,我需要一种算法将数据丢弃到桶中,然后将分数相加.对于上面的数据,结果将是:
1:0
2:410
3:10
注意每个数据如何被与id 2相关联的存储桶捕获,因此得分为100 300 10 = 410.
我怎么写算法来做这个?
解决方法:
试试这段代码:
data = [(0.1,100), (0.13,300), (0.2,10)]
buckets = [((0,0.14), 2), ((0.135,0.19), 1), ((0.19,0.21), 2), ((0.19,0.24), 3)]
def foo(tpl): ## determine the buckets a data-tuple is enclosed by list of IDs
x, s = tpl
lst = []
for bucket in buckets:
rnge, iid = bucket
if x>rnge[0] and x<rnge[1]: lst.append(iid)
return lst
data = [[dt, foo(dt)] for dt in data]
scores_dict = {}
for tpl in data:
score = tpl[0][1]
for iid in tpl[1]:
if iid in scores_dict: scores_dict[iid]+=score
else: scores_dict[iid] =score
for key in scores_dict:
print key,":",scores_dict[key]
此代码段会导致:
2 : 410
3 : 10
如果未打印任何存储桶ID,则该存储桶中没有X值或它总和为零.
内容总结
以上是互联网集市为您收集整理的python – 删除范围存储桶中的数据全部内容,希望文章能够帮你解决python – 删除范围存储桶中的数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。