2016-10-17 4 views
2

Если у меня есть словарь, который записывает отсчет частоту случайных объектов:Рейтинг словаря питона по процентилю

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

И я хочу только ключи, которые находятся в верхнем 25-й процентиле по частоте, как бы я это сделать ? Особенно, если это очень длинный список хвостов, и много записей будут иметь одинаковый счет.

+0

что вы пробовали? Можете ли вы привести пример нужного вам результата? (вопрос потенциально неоднозначный) –

+0

Я по сути просто хочу, чтобы ключи попадали в верхний 25-й процентиль по частоте. IE, если верхний отсек 25-го процентиля - это 5 объектов, а только ключи с 5 или более объектами. Я попытался вычислить верхний предел 25-го процентиля, а затем взял только ключи с> = это значение. но из-за того, что у многих ключей одинаковое значение, он перепутал этот метод. – ugradmath

+0

'sorted (di.items(), key = lambda t: t [1], reverse = True)', а затем возьмите кусочек количества элементов, составляющих 1/4 от общего числа. – dawg

ответ

3

Используйте объект 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'] 

Следует отметить, что потенциальные элементы в этом процентили с равными частотами будут выбраны произвольно .

Смежные вопросы