【问题标题】:count of sublists containing item for all items包含所有项目的项目的子列表计数
【发布时间】:2023-01-22 00:47:40
【问题描述】:

我正在寻找一种更有效/pythonic 的方式来做到这一点。

l = [[0],[1,0],[4,5,1],[2,3,5],[0,4]]

set_l = set([i for sl in l for i in sl])

sublists_containing_item_count = [sum([1 for x in l if i in x]) for i in set_l]

count_dict = dict(zip(set_l,sublists_containing_item_count))

count_dict

{0: 3, 1: 2, 2: 1, 3: 1, 4: 2, 5: 2}

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以使用 collections.Counter 生成计数字典并使用 itertools.chain.from_iterable 展平您的嵌套列表

    >>> from collections import Counter
    >>> import itertools
    
    >>> l = [[0],[1,0],[4,5,1],[2,3,5],[0,4]]
    >>> c = Counter(itertools.chain.from_iterable(l))
    >>> c
    Counter({0: 3, 1: 2, 4: 2, 5: 2, 2: 1, 3: 1})
    

    【讨论】:

      【解决方案2】:

      您想获得高效/Pythonic 方式。

      collections.Counter

      from collections import Counter
      
      l = [[0],[1,0],[4,5,1],[2,3,5],[0,4]]
      
      count_dict = Counter([i for sl in l for i in sl])
      

      非常Pythonic。

      collections.defaultdict

      from collections import defaultdict
      
      l = [[0],[1,0],[4,5,1],[2,3,5],[0,4]]
      count_dict = defaultdict(int)
      
      for sl in l:
          for i in sl:
              count_dict[i] += 1
      

      非常简单的字典。

      结果

      print(count_dict)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多