【问题标题】:Python: List of dictionaries. Count elements based on key of dictionary [closed]Python:字典列表。根据字典的键计算元素[关闭]
【发布时间】:2017-01-15 05:40:34
【问题描述】:

我使用DictReader读取了一个csv文件。

我有一个字典列表:

例如:

a = [{'Name':'A','Class':'1'},{'Name':'B','Class':'1'},{'Name':'C','Class':'2'}]

我想计算列表中 'Class' == 1 的条目数。

可以不循环吗?

编辑:

我尝试了以下方法:

count = 0
for k in a:
    if k['Class'] == '1':
        count += 1
print(count)

【问题讨论】:

  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask

标签: python list dictionary data-science


【解决方案1】:

sumgenerator expression 一起使用:

>>> xs = [{'Name':'A','Class':'1'},
          {'Name':'B','Class':'1'},
          {'Name':'C','Class':'2'}]
>>> sum(x.get('Class') == '1' for x in xs)
2

【讨论】:

  • @DYZ 将在密钥不存在时返回 None 而不是引发错误。
  • @MYGz,使用dict.get 是为了防止KeyError
  • 我知道。 DYZ 正在询问它。
  • @MYGz NVM,我明白了。
【解决方案2】:

也使用列表推导,检索符合您的条件的字典,然后计算其len

>>> len([d for d in a if d.get('Class')=='1'])
2

编辑:Python3.5.2 下的时序配置文件

>>>import timeit
>>>
>>> timeit.timeit(stmt="len([d for d in a if d.get('Class')=='1'])", globals={'a':a})
0.8056499021768104
>>>
>>> timeit.timeit(stmt="sum(x.get('Class') == '1' for x in a)", globals={'a':a})
0.9977147589670494
>>>
>>> timeit.timeit(stmt="len(list(filter(lambda x: x.get('Class')=='1' , a)))", globals={'a':a})
1.3259506113099633

【讨论】:

    【解决方案3】:

    当然:

    a = [{'Name':'A','Class':'1'},{'Name':'B','Class':'1'},{'Name':'C','Class':'2'}]
    print(len(filter(lambda x: x.get('Class')=='1' , a)))
    

    输出:

    2
    

    【讨论】:

      【解决方案4】:

      这是解决问题的老式方法,但如果您想使用 for 循环以这种方式执行此操作,您可以试试这个。

      a = [{'Name':'A','Class':'1'},{'Name':'B','Class':'1'},{'Name':'C','Class':'2'}]
      
      cnt = 0
      for k in a:
          if k['Class'] == '1':
              cnt += 1
      print(cnt)
      

      输出

      2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-22
        • 1970-01-01
        • 2022-11-22
        • 2022-01-10
        • 2015-05-17
        • 1970-01-01
        • 2016-03-15
        • 2015-07-27
        相关资源
        最近更新 更多