在列表列表中查找最常出现的配对

发布于 2021-01-29 16:38:45

我有一个数据集,表示许多技术报告的作者列表。每个报告可以由一个或多个人撰写:

a = [
['John', 'Mark', 'Jennifer'],
['John'],
['Joe', 'Mark'],
['John', 'Anna', 'Jennifer'],
['Jennifer', 'John', 'Mark']
]

我必须找到最频繁的人,即过去合作最多的人:

['John', 'Jennifer'] - 3 times
['John', 'Mark'] - 2 times
['Mark', 'Jennifer'] - 2 times
etc...

如何在Python中执行此操作?

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    结合使用collections.Counterdict itertools.combinations

    from collections import Counter
    from itertools import combinations
    
    d  = Counter()
    for sub in a:
        if len(a) < 2:
            continue
        sub.sort()
        for comb in combinations(sub,2):
            d[comb] += 1
    
    print(d.most_common())
    [(('Jennifer', 'John'), 3), (('John', 'Mark'), 2), (('Jennifer', 'Mark'), 2), (('Anna', 'John'), 1), (('Joe', 'Mark'), 1), (('Anna', 'Jennifer'), 1)]
    

    most_common()将以最常见到最少的顺序返回配对,您要第一个n最常见的通过n d.most_common(n)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看