python - 在列表列表中查找最常见的元素
问题描述
我有一堆键和值
Key 1 ['apple', 'banana', 'orange', 'chicken']
key 1 ['cake', 'orange', 'apple']
key 2 ['oreo','chips']
现在我想按键分组,并且只有 50% 的键中存在的值,所以输出将是
key 1 ['orange', 'apple']
Key 2 ['oreo','chips']
我对应该用来存储它的数据结构感到困惑。我是否应该只使用列表列表来存储值,然后每次搜索所有值并获得顶部。有没有更优化的方法
解决方案
您可以简单地拥有一个包含键和列表的对列表。它可以像这样工作:
from itertools import groupby, chain
from collections import Counter
def frequency_filter(group, freq):
group = list(group)
c = Counter(chain.from_iterable(set(items) for _, items in group))
n = round(len(group) * freq)
return [k for k, v in c.items() if v > n]
data = [('key 1', ['apple', 'banana', 'orange', 'chicken']),
('key 1', ['cake', 'orange', 'apple']),
('key 2', ['oreo','chips'])]
result = {k: frequency_filter(g, 0.5) for k, g in groupby(data, key=lambda t: t[0])}
print(result)
# {'key 1': ['orange', 'apple'], 'key 2': ['oreo', 'chips']}
推荐阅读
- laravel - 如何更新laravel收银员的ends_at字段
- .net - 通过 Azure Active Directory 管理 .Net Core 应用程序角色和权限
- qt - Qt + VS2019 16.7.0:moc:指定的输入文件过多
- sails.js - 无法让 customToJSON 在sails1 模型中工作
- python - 烧瓶。芹菜不运行任务
- python - 如何在 Python 中停止 Azure 事件中心使用者客户端
- java - 为什么 Parent root =FXMLLoader 无法正常工作?
- c# - 如何在 asp.net mvc 一个视图中显示多个连接模型
- c# - .NET 中的 Direct Line API 示例
- ringcentral - RingCentral 中不同分支的多个来电显示