按频率对Python中的列表列表进行排序 [英] Sorting a List of List in Python by frequency
问题描述
我正在尝试按出现的频率对Python中的列表项列表进行排序未排序的列表看起来像这样:
I am trying to sort a list of list items in Python by the frequency of the occurrence The unsorted list looks something like this :
a=[ ['item1', 'item2', 'element2'],
['item3', 'item4', 'element3'],
['item5', 'item6', 'element1'],
['item7', 'item8', 'element3']]
我想按列表第3个元素的出现频率进行排序.因此,排序后的结果列表将如下所示:
I would like to sort by the frequency of the 3rd element of the list. So, the result list after sorting, would look something this :
result = [ ['item3', 'item4', 'element3'],
['item7', 'item8', 'element3'],
['item1', 'item2', 'element2'],
['item5', 'item6', 'element1']]
我不是Python专家.任何想法,怎么办?
I am not an expert with Python. Any idea, how can it be done?
推荐答案
您必须首先收集频率;一个 collections.Counter()
对象可以很好地做到这一点.然后,您可以按以下方式查找频率和顺序:
You'll have to collect frequencies first; a collections.Counter()
object would do this nicely. You can then look up frequencies and order by that:
from collections import Counter
freq = Counter(item[-1] for item in a)
result = sorted(a, key=lambda i: freq[i[-1]], reverse=True)
此处 freq
保存每个嵌套列表中最后一个元素的计数,然后我们以相反的顺序使用排序键(最频繁的排序在前).
Here freq
holds counts for the last element in each nested list, which we then use a sort key, in reverse order (most frequent sorted first).
演示:
>>> from collections import Counter
>>> a=[ ['item1', 'item2', 'element2'],
... ['item3', 'item4', 'element3'],
... ['item5', 'item6', 'element1'],
... ['item7', 'item8', 'element3']]
>>> freq = Counter(item[-1] for item in a)
>>> sorted(a, key=lambda i: freq[i[-1]], reverse=True)
[['item3', 'item4', 'element3'], ['item7', 'item8', 'element3'], ['item1', 'item2', 'element2'], ['item5', 'item6', 'element1']]
>>> from pprint import pprint
>>> pprint(_)
[['item3', 'item4', 'element3'],
['item7', 'item8', 'element3'],
['item1', 'item2', 'element2'],
['item5', 'item6', 'element1']]
这篇关于按频率对Python中的列表列表进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!