我有一个包含多个元组列表的列表。我想将每个元组与列表中的每个其他元组进行比较,并返回完全匹配的计数。
foo = [[('a',),('a','b'),('a','b','c'),('b','c'),('c',)],[('a',),('a','b')]]
预期结果:
('a',) 2
('a','b') 2
('a','b','c') 1
('b','c') 1
('c',) 1
任何帮助表示感谢。
答案 0 :(得分:2)
>>> import itertools
>>> import collections
>>>
>>> foo = [[('a',),('a','b'),('a','b','c'),('b','c'),('c',)],[('a',),('a','b')]]
>>> for x, cnt in collections.Counter(itertools.chain.from_iterable(foo)).most_common():
... print(x, cnt)
...
('a',) 2
('a', 'b') 2
('a', 'b', 'c') 1
('c',) 1
('b', 'c') 1
答案 1 :(得分:1)
您需要将所有列表合并为一个,然后您可以使用Collections.Counter
,就像这样
foo = [[('a',),('a','b'),('a','b','c'),('b','c'),('c',)],[('a',),('a','b')]]
from collections import Counter
print Counter(item for items in foo for item in items)
<强>输出强>
Counter({('a', 'b'): 2, ('a',): 2, ('b', 'c'): 1, ('c',): 1, ('a', 'b', 'c'): 1})
使用普通dict
result = {}
for items in foo:
for item in items:
result[item] = result.get(item, 0) + 1
print result
<强>输出强>
{('b', 'c'): 1, ('c',): 1, ('a', 'b'): 2, ('a',): 2, ('a', 'b', 'c'): 1}