在 Python 中从元组列表中查找前 K 个频繁元素
pythonserver side programmingprogramming更新于 2026/1/22 20:28:17
我们有一个元组列表。我们需要在其中找到前 k 个频繁元素。如果 k 为 3,我们需要从列表内的元组中找到前三个元素。
使用 defaultdict
我们使用 defaultdict 将元素放入字典容器中。然后找出满足前 k 个条件的元素。
示例
import collections
from operator import itemgetter
from itertools import chain
# 输入列表初始化
listA = [[('Mon', 126)], [('Tue', 768)],[('Wed', 512)], [('Thu', 13)],[('Fri', 341)]]
# 设置 K
K = 3
# 给定列表
print("给定列表:\n",listA)
print("检查值:\n",K)
# 使用 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()}
# 使用 sorted
res = sorted(res.items(), key=itemgetter(1),
reverse=True)[0:K]
# 输出
print("前 3 个元素是:\n", res)
输出
运行上述代码得到以下结果 −
给定列表:
[[('Mon', 126)], [('Tue', 768)], [('Wed', 512)], [('Thu', 13)], [('Fri', 341)]]
检查值:
3
前 3 个元素是:
[('Tue', 768), ('Wed', 512), ('Fri', 341)]
使用 sorted 和 itergetter
在此方法中,我们使用 itemgetter 函数,但通过提及从 0 到 K 的范围将其应用于 sorted 函数中。
示例
来自运算符导入 itemgetter
来自 itertools 导入链
# 输入列表初始化
listA = [[('Mon', 126)], [('Tue', 768)],[('Wed', 512)], [('Thu', 13)],[('Fri', 341)]]
# 设置 K
K = 3
# 给定列表
print("给定列表:\n",listA)
print("检查值:\n",K)
#使用 sorted
res = sorted(list(chain.from_iterable(listA)),
key = itemgetter(1), reverse = True)[0:K]
# 输出
print("前 3 个元素是:\n", res)
输出
运行上述代码得到以下结果 −
给定列表:
[[('Mon', 126)], [('Tue', 768)], [('Wed', 512)], [('Thu', 13)], [('Fri', 341)]]
检查值:
3
前 3 个元素是:
[('Tue', 768), ('Wed', 512), ('Fri', 341)]
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

