#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']
Обратите внимание, что потенциальные элементы в этом процентиле с одинаковыми частотами будут выбраны произвольно.