2

我有一个值列表,表示一段正则表达式在字符串中匹配的次数。由此,我想找到不止一次出现的数字,以及它们的计数。例如,如果它在字典中或在列表列表中,[2, 2, 2, 0, 2, 1, 3, 3]我想要作为输出。我正在寻找最快,最简洁的方法来做到这一点。现在,我通过以下代码执行此操作,但认为这是冗长的最佳方式。{2:4,3:2}[[2,4],[3,2]]

numWinners=[2, 2, 2, 0, 2, 1]
tieCount={x:numWinners.count(x) for x in numWinners}
ties=dict()
for key, value in tieCount.items():
    if value>1:
        ties[key]=value

print ties
{2: 4, 3: 2}

列表或字典输出对我来说并不是真正的问题 - 再次,无论是最快和简洁的。

4

3 回答 3

5

我会结合collections.Counter字典理解来选择重复项:

>>> from collections import Counter
>>> numWinners = [2, 2, 2, 0, 2, 1, 3, 3]
>>> counts = Counter(numWinners)
>>> {k: v for k,v in counts.items() if v > 1}
{2: 4, 3: 2}
于 2013-10-21T00:28:55.327 回答
2

您可以使用 dict 理解来创建直方图:

>>> ns=[2, 2, 2, 0, 2, 1, 3, 3]
>>> {x: ns.count(x) for x in set(ns) if ns.count(x) > 1}
{2: 4, 3: 2}
于 2013-10-21T00:32:29.363 回答
0

尝试使用collections.defaultdict

import collections
ties = collections.defaultdict(lambda:0)
for num in numWinners:
     ties[num] = ties[num]+1


 for key,value in ties.iteritems():
     print key, value
于 2013-10-21T00:33:18.937 回答