gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:13:15 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com