Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取与dict python中的键关联的值的计数_Python_Python 2.7_Dictionary - Fatal编程技术网

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

获取与dict python中的键关联的值的计数,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,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的成功计数为真 我试过了 len(filter(lambda x: x, [i['success'] for i in s])) 如何使

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的
成功
计数为

我试过了

len(filter(lambda x: x, [i['success'] for i in s]))
如何使用pythonic方法使其更加优雅?

您可以使用
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)
另一种方法是

len(filter(lambda x:x['success'], s))
如果你在dict中没有“成功”,它可能会崩溃

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

可以完成这项工作

以下是您如何优雅地完成这项工作:

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
这是一个很好的解释