[英]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.