按频率对Python中的列表列表进行排序 [英] Sorting a List of List in Python by frequency

查看:63
本文介绍了按频率对Python中的列表列表进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试按出现的频率对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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆