python 计算元组列表的一个字段中三次重复的次数

python count number of triple-repeats in one field of a list of tuples

我有姓名、名字和姓氏的列表。

如何计算大于 3 的姓氏数。

import collections

names = [['Fiona','Murray'],
['Diane','Springer'],
['Dylan','Oliver'],
['Alison','McDonald'],
['Sophie','Peters'],
['Kevin','Davidson'],
['David','Marshall'],
['Jake','Lewis'],
['Thomas','Burgess'],
['Fiona','Murray'],
['Fiona','Murray'],
['Fiona','Murray'],
['Fiona','Murray'],
['Dylan','Oliver'],
['Dylan','Oliver'] ]

lst1 = [(a,b) for (a,b) in collections.Counter(map(tuple,names)).iteritems()]

我尝试了列表理解,但无法获得大于 3 的姓氏。

首先,您在 collections.Counter 中使用了完整的元组(名字和姓氏),对于您想要的,您只需要使用每个内部列表的第二个元素(不是完整的内部列表转换为元组)。

其次,在列表理解中没有检查计数是否大于 3 的条件。您应该检查 b 是否大于 3。

例子-

>>> lst1 = [(a,b) for (a,b) in collections.Counter([a[1] for a in names]).iteritems() if b > 3]
>>> lst1
[('Murray', 5)]

您可以使用 collections.Counter:

from collections import Counter
counter = Counter([item[1] for item in names])
keys = [key for key, value in counter.items() if value > 3]
print(keys)

将打印:

['Murray']

一种更函数式的编程方法。

from collections import Counter
from operator import itemgetter
from itertools import imap

[(name, count) for name, count in Counter(imap(itemgetter(1), names)).iteritems() if count > 3]
lst1=[entry[0] for entry in collections.Counter(map(tuple,names)).iteritems() if entry[1]>3]

为了计数,只需将 len() 放在它前面。