代码之家  ›  专栏  ›  技术社区  ›  Nishant Nawarkhede

获取与dict python中的键关联的值的计数

  •  4
  • Nishant Nawarkhede  · 技术社区  · 10 年前

    dict列表如下。

    [{'id': 19, 'success': True, 'title': u'apple'},
     {'id': 19, 'success': False, 'title': u'some other '},
     {'id': 19, 'success': False, 'title': u'dont know'}]
    

    我要数一数dict有多少 success True .

    我试过了,

    len(filter(lambda x: x, [i['success'] for i in s]))
    

    如何使用pythonic方式使其更优雅?

    3 回复  |  直到 10 年前
        1
  •  9
  •   Martijn Pieters    10 年前

    你可以使用 sum() 将布尔值相加; True 在数字上下文中为1, False 是0:

    sum(d['success'] for d in s)
    

    这是因为Python bool 类型是的子类 int ,出于历史原因。

    如果你想让它显式,你可以使用条件表达式,但在我看来,可读性并没有提高:

    sum(1 if d['success'] else 0 for d in s)
    
        2
  •  1
  •   ikhtiyor    10 年前

    另一种方法是

    len(filter(lambda x:x['success'], s))
    

    如果你在dict中没有“成功”,它可能会崩溃

    len(filter(lambda x:x.get('success',False), s))
    

    可以做这项工作

        3
  •  1
  •   Pouria    10 年前

    以下是您优雅的做法:

    args = [
        {'id': 19, 'success': True, 'title': u'apple'},
        {'id': 19, 'success': False, 'title': u'some other '},
        {'id': 19, 'success': False, 'title': u'dont know'}
    ]
    
    
    count_success = lambda x: 1 if x['success'] else 0
    
    success_list = map(count_success, args)
    
    print(sum(success_list))  # Python 3
    print sum(success_list)   # Python 2
    

    显示器:

    1
    

    这是Pythonic,因为它得到了。