查找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}