有没有python模块可以计算(list, list)元组的频率?



我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像:

mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', 'bar']),(['foo', 'bar'], ['bar', 'bar'])]

我想这样做:

pprint.pprint(Counter(mylist).mostCommon(1)) # returns {(['foo', 'bar'], ['bar', bar']) : count 2}

然而,当我做Counter(mylist)时,python抛出了一个错误,"不可哈希类型列表"——就像这个问题一样。Python: unhashable type error

我知道我可以像这样滚动我自己的计数器,但它肯定会比Python的慢得多。有什么python模块可以帮我做这个吗?

如果您想按确切的内容计数,只需将列表转换为元组:

Counter((tuple(l1), tuple(l2)) for l1, l2 in mylist).most_common(1)
演示:

>>> from collections import Counter
>>> mylist = [(['foo', 'bar'], ['bar', 'bar']), (['bar', 'bar'], ['bar', 'bar']), (['foo', 'bar'], ['bar', 'bar'])]
>>> Counter((tuple(l1), tuple(l2)) for l1, l2 in mylist).most_common(1)[0]
((('foo', 'bar'), ('bar', 'bar')), 2)

现在你的内容是可哈希的,可以计数。如果需要的话,您可以随时将键转换回列表。

>>> Counter(tuple(map(tuple, elem)) for elem in mylist).most_common(1)
[((('foo', 'bar'), ('bar', 'bar')), 2)]

最新更新