python - 在Python中按频率对列表列表进行排序

标签 python list sorting

我正在尝试按出现频率对 Python 中的列表项列表进行排序 未排序的列表看起来像这样:

a=[     ['item1', 'item2', 'element2'],
        ['item3', 'item4', 'element3'],
        ['item5', 'item6', 'element1'],
        ['item7', 'item8', 'element3']]

我想按列表中第三个元素的出现频率进行排序。因此,排序后的结果列表将如下所示:

result = [  ['item3', 'item4', 'element3'],
            ['item7', 'item8', 'element3'],
            ['item1', 'item2', 'element2'],
            ['item5', 'item6', 'element1']]

我不是 Python 专家。任何想法,如何才能做到?

最佳答案

你必须首先收集频率;一个collections.Counter() object会做得很好。然后您可以查找频率并按频率排序:

from collections import Counter

freq = Counter(item[-1] for item in a)
result = sorted(a, key=lambda i: freq[i[-1]], reverse=True)

这里 freq 保存每个嵌套列表中最后一个元素的计数,然后我们以相反的顺序使用排序键(最常见的首先排序)。

演示:

>>> 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 - 在Python中按频率对列表列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762609/

相关文章:

python - Pandas ,如何过滤 df 以获得独特的条目?

指针C(链表)上的困惑

python - 从数据文件中更改列表中的值

java - 如何只从列表中删除一个重复项?

python - 按元素出现频率对 python 列表进行排序

c# - 对 XDocument 中的所有元素进行排序

python - 更改 Gtk.Button 标签的样式/字体

python - 使用python和OpenCV计数图像上的单元格

python - 如何在 Flask 中跨 View 函数/ session 传递复杂对象

Python numpy 如何根据行对 ndarray 进行排序