在Python中按数字阈值排序的有效方法?
给定一个字典流,每个字典都具有唯一的数字 ID,map基于不线性增加的阈值(<48、<103、 <123...)?我没有广泛研究itertools或其他有用的迭代库,我想不出比使用elifs更好的分组方式。
使用 if/elif/else 的示例:
dicts = [{'id':30},{'id':60},{'id':90},{'id':120},{'id':150}]
groups = [[] for _ in range(5)]
for a_dict in dicts:
ID = a_dict['id']
if ID < 50: groups[0].append(ID)
elif ID < 100: groups[1].append(ID)
elif ID < 150: groups[2].append(ID)
elif ID < 200: groups[3].append(ID)
else: groups[4].append(ID)
输出:
>>> print(groups)
[[30], [60, 90], [120], [150], []]
回答
该平分线的算法应该是决定其中的组的项目属于(假设你的组排序)的最有效方式。事实上,页面底部有一个类似于您想要实现的示例。
>>> import bisect
>>> bins = [50, 100, 150, 200]
>>> bisect.bisect(bins, 30)
0
>>> bisect.bisect(bins, 60)
1
>>> bisect.bisect(bins, 220)
4
总而言之
for a_dict in dicts:
ID = a_dict['id'] # don't use Python built-in names
index = bisect.bisect(bins, ID)
groups[index].append(ID)
- @ZeinabMardi How is this relevant?
- @wish Please see [What should I do when someone answers my question?](https://stackoverflow.com/help/someone-answers)