Сортировка списка по количеству появлений и удаление дубликатов - PullRequest
0 голосов
/ 25 декабря 2018

Например, у меня есть следующий список, в котором количество появлений на элемент:

apple - 3
banana - 4
orange - 2

список:

["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"]

Мне нужно отсортировать список поРаспространенность без дубликатов, поэтому ожидаемые результаты будут:

["banana", "apple", "orange"]

Я думал о создании словаря с каждым элементом в качестве ключа, итерации по списку и последующем добавлении +1 для каждого найденного ключа, поэтомуВ итоге я приведу пример словаря:

dic = {"apple": 3, "banana": 4, "orange":2}

Но вроде застрял в том, как отсортировать сам список без дубликатов ..

Заранее спасибо.

РЕДАКТИРОВАТЬ : Спасибо всем, у меня не было знаний о Counter.С праздником!

Ответы [ 5 ]

0 голосов
/ 25 декабря 2018

с использованием list и set

a = ["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"]
result =sorted(list(set(a)))

вывод:

['apple', 'banana', 'orange']
0 голосов
/ 25 декабря 2018
from itertools import groupby

L = ["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"] # Input list

counts = [(i, len(list(c))) for i,c in groupby(sorted(L))]      # Create value-count pairs as list of tuples 
counts =  sorted(counts, key = lambda i: i[1] , reverse=True)    #sort value-count list
out = [key for key, value in counts]   #extract key
print (out)
0 голосов
/ 25 декабря 2018

сортировка набора на основе количества оригинального списка.РЕДАКТИРОВАТЬ: Как указано в комментариях, вы можете использовать другие решения вместо этого, если у вас много кандидатов, многократный вызов метода подсчета списка не является оптимальным.

a = ["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"]
sorted(set(a), key = lambda x: a.count(x), reverse = True) #reverse for descending

Результат:

['banana', 'apple', 'orange']
0 голосов
/ 25 декабря 2018

Вы можете использовать collections.Counter и метод most_common:

from collections import Counter

lst = ["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"]

res = [k for k, _ in Counter(lst).most_common()]
# ['banana', 'apple', 'orange']
0 голосов
/ 25 декабря 2018

Использование Счетчик :

from collections import Counter

data = ["apple", "apple", "banana", "orange", "orange", "banana", "banana", "apple", "banana"]

counts = Counter(data)
result = sorted(counts, key=counts.get, reverse=True)
print(result)

Выход

['banana', 'apple', 'orange']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...