在列表列表中查找最常出现的配对
问题内容:
我有一个数据集,表示许多技术报告的作者列表。每个报告可以由一个或多个人撰写:
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中执行此操作?
问题答案:
结合使用collections.Counter
dict 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)