【问题标题】:Counting number of a value in a dictionary when values are a list of lists当值是列表列表时计算字典中值的数量
【发布时间】:2022-01-18 08:42:54
【问题描述】:

我有一本字典,其中的值是列表列表,我想计算某个值在字典中出现的次数。 我试过这样的事情:

d = { 'A': ['apple', 'banana', 'grape'],
      'B': ['cherry', 'tomato', 'apple'],
      'C': ['grape', 'kiwi', 'banana']
      }
print(list(d.values()).count('apple'))

但是当我尝试时,我会得到零回报

【问题讨论】:

    标签: python python-3.x list dictionary


    【解决方案1】:

    使用collections.Counteritertools.chain()

    from collections import Counter
    from itertools import chain
    
    d = { 'A': ['apple', 'banana', 'grape'],
          'B': ['cherry', 'tomato', 'apple'],
          'C': ['grape', 'kiwi', 'banana']}
    
    cntr = Counter(chain(*d.values()))
    print(cntr.get('apple'))
    

    【讨论】:

      【解决方案2】:

      你必须依靠每个列表,而不是列表列表。

      d = {'A': ['apple', 'banana', 'grape'],
           'B': ['cherry', 'tomato', 'apple'],
           'C': ['grape', 'kiwi', 'banana']
           }
      # This counts on list of lists - not on each list- your appraoch
      print(list(d.values()).count('apple'))
      
      # This counts on each list - Solution
      print(sum(l.count('apple') for l in d.values()))
      

      【讨论】:

      • 谢谢,这让我明白了为什么我要回到零了
      【解决方案3】:
      d2 = {}
      for d_vals in d.values():
          for el in d_vals:
              d2[el] = d2.get(el, 0) + 1
      d2["apple"]
      # 2
      

      如果你只需要一个计数

      sum([x.count("apple") for x in d.values()])
      # 2
      

      【讨论】:

        【解决方案4】:

        d.values()转换为列表并使用collections.Counter

        from collections import Counter
        d_vals = []
        for v in d.values():
            d_vals.extend(v)
        out = Counter(d_vals)
        

        输出:

        Counter({'apple': 2,
                 'banana': 2,
                 'grape': 2,
                 'cherry': 1,
                 'tomato': 1,
                 'kiwi': 1})
        

        那么例如,

        print(out['apple']) # 2
        

        【讨论】:

          猜你喜欢
          • 2020-07-19
          • 2021-08-04
          • 1970-01-01
          • 2015-10-18
          • 2022-11-27
          • 1970-01-01
          • 2021-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多