簡體   English   中英

按頻率對Python中的列表列表進行排序

[英]Sorting a List of List in Python by frequency

我正在嘗試按照出現的頻率對Python中的列表項列表進行排序。未排序的列表看起來像這樣:

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

我想按列表第3個元素的頻率排序。 因此,排序后的結果列表如下所示:

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

我不是Python專家。 任何想法,怎么辦?

您必須先收集頻率; 一個collections.Counter()對象可以很好地做到這一點。 然后,您可以按以下方式查找頻率和順序:

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']]

看一下集合。

例:

wordlist = ['foo', 'bar', 'foo', 'baz']
import collections
counter = collections.Counter(wordlist)
counter.most_common()

收益:

[('foo', 2), ('baz', 1), ('bar', 1)]

我認為沒有必要導入Counter或其他任何東西,只需定義自己的鍵函數即可返回列表的最后一個元素,從而根據該元素進行排序...

因此,您可以像這樣對鍵函數last_element(定義的)使用“ sorted”:

def last_element(x): return x[-1]

sorted(a, key=last_element, reverse=True)

你會得到:

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

如果您不想定義一個新函數,則可以使用lambda(類似於另一個答案中所示),因此僅一行的解決方案是:

sorted(a, key=lambda x: x[-1], reverse=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM