2

リスト内の文字列tagsの出現回数で並べ替えたい文字列のリストがあります。

私が試してみました:

一意の文字列のリストを作成し、

uniqueTags = set(tags)

次に、一意の各文字列のカウントを含む 2 番目のリストを作成します。

countList = []
for items in uniqueTags:
    countList.append(tags.count(items))

しかし、並べ替えの方法がわかりません。

4

2 に答える 2

6

collections.Counter(...)代わりに使用してください。

In [18]: from collections import Counter

In [19]: m = ['a', 'b', 'a', 'b', 'c']

In [20]: Counter(m).most_common()
Out[20]: [('a', 2), ('b', 2), ('c', 1)]

Counter.most_common()最初の要素が文字列で、2 番目の要素がそのカウントであり、リストがカウント順に並べられたタプルのリストを返します。

In [21]: m2 = ['a', 'b', 'a', 'b', 'c', 'b']

In [22]: Counter(m2).most_common()
Out[22]: [('b', 3), ('a', 2), ('c', 1)]

アイテムのリストを取得するだけで、次のことができます

In [28]: [elem for elem, _ in Counter(m2).most_common()]
Out[28]: ['b', 'a', 'c']

取得したリストを並べ替えたい場合は、メソッドを次のように変更します

In [23]: final_list = []

In [24]: for elem in set(m2):
    ...:     final_list.append((elem, m2.count(elem)))
    ...:     

In [25]: from operator import itemgetter

In [26]: sorted(final_list, key=itemgetter(1))
Out[26]: [('c', 1), ('a', 2), ('b', 3)]

In [27]: sorted(final_list, key=itemgetter(1), reverse=True)
Out[27]: [('b', 3), ('a', 2), ('c', 1)]
于 2013-10-30T13:08:32.223 に答える
1

これを行う1つの方法は次のとおりです。

from collections import Counter
from operator import itemgetter
get_val = itemgetter(0)

def retrieve_unique_sorted_by_count(lst)
    return [get_val(x) for x in Counter(lst).most_common()]
于 2013-10-30T13:24:14.280 に答える