从 Python 元组列表中查找最常出现的 K 个元素


我们有一个元组列表。我们需要在其中查找出现频率最高的前 k 个元素。如果 k 为 3,我们需要从列表中的元组中查找频率排名前三的元素。

使用 defaultdict

我们将元素放入使用 defaultdict 的字典容器中。然后只找出满足最高 k 个元素条件的元素。

示例

现场演示

import collections
from operator import itemgetter
from itertools import chain
# Input list initialization
listA = [[('Mon', 126)], [('Tue', 768)],[('Wed', 512)], [('Thu', 13)],[('Fri', 341)]]
# set K
K = 3
#Given list
print("Given list:\n",listA)
print("Check value:\n",K)
# Using defaultdict
dict_ = collections.defaultdict(list)
new_list = list(chain.from_iterable(listA))
for elem in new_list:
   dict_[elem[0]].append(elem[1])
res = {k: sum(v) for k, v in dict_.items()}
# Using sorted
res = sorted(res.items(), key=itemgetter(1),
reverse=True)[0:K]
# Output
print("Top 3 elements are:\n", res)

输出

运行上述代码会得到以下结果 −

Given list:
[[('Mon', 126)], [('Tue', 768)], [('Wed', 512)], [('Thu', 13)], [('Fri', 341)]]
Check value:
3
Top 3 elements are:
[('Tue', 768), ('Wed', 512), ('Fri', 341)]

使用 sorted 和 itergetter

这种方法中,我们使用 itemgetter 函数,但通过指定 0 到 K 的范围将其应用于 sorted 函数内。

示例

现场演示

from operator import itemgetter
from itertools import chain
# Input list initialization
listA = [[('Mon', 126)], [('Tue', 768)],[('Wed', 512)], [('Thu', 13)],[('Fri', 341)]]
# set K
K = 3
#Given list
print("Given list:\n",listA)
print("Check value:\n",K)
# Using sorted
res = sorted(list(chain.from_iterable(listA)),
   key = itemgetter(1), reverse = True)[0:K]
# Output
print("Top 3 elements are:\n", res)

输出

运行上述代码会得到以下结果 −

Given list:
[[('Mon', 126)], [('Tue', 768)], [('Wed', 512)], [('Thu', 13)], [('Fri', 341)]]
Check value:
3
Top 3 elements are:
[('Tue', 768), ('Wed', 512), ('Fri', 341)]

更新日期:2020 年 6 月 4 日

188 次浏览

开始您的职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.