【问题标题】:Ranking python dictionary by percentile按百分位排列python字典
【发布时间】:2016-10-17 22:45:24
【问题描述】:

如果我有一本记录随机对象计数频率的字典:

dict = {'oranges': 4 , 'apple': 3 , 'banana': 3 , 'pear' :1, 'strawberry' : 1....}

而且我只想要频率在前 25 个百分位的键,我该怎么做?特别是如果它是一个很长的尾列表并且很多记录将具有相同的计数。

【问题讨论】:

  • 到目前为止您尝试过什么?你能举一个你想要的输出的例子吗? (这个问题可能模棱两可)
  • 我基本上只想要按频率计数落入前 25 个百分位的键。 IE 如果前 25 个百分位截止值是 5 个对象,那么只有具有 5 个或更多对象的键。我尝试计算前 25 个百分位截止值,然后只取 >= 该值的键。但是因为很多键具有相同的值,所以会弄乱该方法。
  • sorted(di.items(), key=lambda t:t[1], reverse=True) 然后对占总数 1/4 的项目数进行切片。

标签: python numpy dictionary


【解决方案1】:

使用collections.Counter 对象并利用其most_common 方法将频率最高的键返回到所需的百分位数。

对于第 25 个百分位数,将字典的长度除以 4 并将该值传递给 most_common:

>>> from collections import Counter
>>> dct = {'oranges': 4 , 'apple': 3 , 'banana': 3 , 'pear' :1, 'strawberry' : 1}
>>> c = Counter(dct)
>>> [tup[0] for tup in c.most_common(len(dct)//4)]
['oranges']

请注意,该百分位数中具有相同频率的潜在元素将被任意选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多