【问题标题】:Is there any python module that will count frequency of (list, list) tuples?是否有任何 python 模块可以计算 (list, list) 元组的频率?
【发布时间】:2014-05-29 13:05:57
【问题描述】:

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

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 会抛出一个错误,“unhashable type list”——就像在这个问题中一样。 python: unhashable type error

我知道我可以滚动自己的计数器like here,但它肯定会比 Python 慢得多。是否有任何 python 模块可以为我执行此操作?

【问题讨论】:

    标签: python list tuples counter


    【解决方案1】:

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

    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)
    

    现在您的内容是可散列的并且可以计算。如果需要,您可以随时将键重新转换为列表。

    【讨论】:

    • @SukritKalra:是的,我很想先纠正 OP 输入样本。已更正。
    【解决方案2】:
    >>> Counter(tuple(map(tuple, elem)) for elem in mylist).most_common(1)
    [((('foo', 'bar'), ('bar', 'bar')), 2)]
    

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 2020-07-11
      • 1970-01-01
      • 2013-04-01
      • 2016-11-02
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      相关资源
      最近更新 更多