Ранжирование словаря python по процентилям

#python #numpy #dictionary

#python #numpy #словарь

Вопрос:

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

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

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

Комментарии:

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

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

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

Ответ №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']
  

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