在嵌套的元组列表中获取元组的完全匹配计数

时间:2014-01-10 06:29:47

标签: python list count comparison tuples

我有一个包含多个元组列表的列表。我想将每个元组与列表中的每个其他元组进行比较,并返回完全匹配的计数。

    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

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

使用collections.Counter

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