我发现python中的Counter()函数非常有用,它有一个内置的Counter.most_common()函数,可以按照从最常见到最不常见的顺序返回键。但是我没有找到build_in函数来过滤掉所有唯一的,或者超出/低于外观阈值的键。这对字典组合来说并不太难,但看起来像是一个常见的功能,我想知道(a)为什么它不是内置的,和(b)我做过想念它?
我的方法,给出了一些数据:
x = ['904692239', '904692239', '416618990', '965059531', '904692239', '48644135', '904692239', '386210409', '978527886', '102666625', '793573909', '826761606', '980035897', '837619792', '709804744', '703248895', '904692239', '843796438', '633621488', '374214079', '904692239', '218851385', '359342704', '793949601', '793949601', '216731638', '793949601', '721831814', '715338006', '466865724', '160977579', '971821714', '715338006', '612216206', '658467007', '67897613', '255688245', '457452213', '457452213', '984706137', '160977579', '160977579', '503944932', '261444687', '95794369', '286082560', '974609408', '457408015', '376428770', '636170296', '636170296', '636170296', '721831814']
from collections import Counter
y = Counter(x)
non_uniques = [k for k,v in Counter(x).items() if v > 1]
>>>non_uniques
['715338006', '457452213', '904692239', '160977579', '793949601', '636170296', '721831814']
这是最有效的方法吗? (获取列表并过滤掉该列表中所有非唯一事件)
答案 0 :(得分:1)
不,没有内置方法,这通常不是必需的。
您可以使用itertools.takewhile()
获取所有“唯一”键:
from itertools import takewhile
for unique in takewhile(lambda pair: p[1] == 1, reversed(y.most_common())):
或所有非独特的:
for unique in takewhile(lambda pair: p[1] > 1, y.most_common()):
这两种方法都需要完整的字典,所以你自己的方法,只循环一次,也很好。