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() 放在它前面。
我有姓名、名字和姓氏的列表。
如何计算大于 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() 放在它前面。