查找python中出现在k个以上集合中的元素
我正在实现一个基本的拼写纠正系统,并且我已经为我的域语言建立了一个反向索引,其中每个字符的双字符映射到包含该双字符的单词列表 现在我想找到所有与给定单词查找python中出现在k个以上集合中的元素,python,set,intersection,Python,Set,Intersection,我正在实现一个基本的拼写纠正系统,并且我已经为我的域语言建立了一个反向索引,其中每个字符的双字符映射到包含该双字符的单词列表 现在我想找到所有与给定单词w共享3个以上字符的单词。因此,主要的问题是:给定一组列表,如何有效地找到其中3个或更多列表中出现的元素 例如,给定集合: ('a', 'b', 'c', 'd') , ('a', 'e', 'f', 'g'), ('e', 'f', 'g', 'h'), ('b', 'c', 'z', 'y'), ('e', 'k', 'a', 'j') 我
w
共享3个以上字符的单词。因此,主要的问题是:给定一组列表,如何有效地找到其中3个或更多列表中出现的元素
例如,给定集合:
('a', 'b', 'c', 'd') , ('a', 'e', 'f', 'g'), ('e', 'f', 'g', 'h'), ('b', 'c', 'z', 'y'), ('e', 'k', 'a', 'j')
我希望得到输出:
('a', 'e')
由于a
和e
分别出现在3组以上
非常感谢您的建议。您可以尝试使用
集合。计数器
:
from collections import Counter
data = [
('a', 'b', 'c', 'd'),
('a', 'e', 'f', 'g'),
('e', 'f', 'g', 'h'),
('b', 'c', 'z', 'y'),
('e', 'k', 'a', 'j'),
]
c = Counter()
for e in data:
c.update(e)
# print(c)
# for k, v in c.items():
# if v >= 3:
# print(k, v)
您可以使用以下命令(或类似命令)获得输出:
对@Ralf的补充。您可以使用dicts构建直方图
someCollection = [('a', 'b', 'c', 'd') , ('a', 'e', 'f', 'g'), ('e', 'f', 'g', 'h'), ('b', 'c', 'z', 'y'), ('e', 'k', 'a', 'j')]
hist = {}
for collection in someCollection:
for member in collection:
hist[member] = hist.get(member, 0) + 1
Hist现在是:
{'a': 3,
'b': 2,
'c': 2,
'd': 1,
'e': 3,
'f': 2,
'g': 2,
'h': 1,
'z': 1,
'y': 1,
'k': 1,
'j': 1}
它可以通过排序(hist.items(),key=lambda x[1])#按值排序来排序显示您的代码和关于@ycx的预期输出我添加了一个示例。@stovfl对我帮助不大。谢谢,我使用了这个方法,但我不确定这是最有效的方法。
{'a': 3,
'b': 2,
'c': 2,
'd': 1,
'e': 3,
'f': 2,
'g': 2,
'h': 1,
'z': 1,
'y': 1,
'k': 1,
'j': 1}