在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)

以上是在Python中按数字阈值排序的有效方法?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>