我使用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)
答案 0 :(得分:4)
将sum
与generator expression一起使用:
>>> xs = [{'Name':'A','Class':'1'},
{'Name':'B','Class':'1'},
{'Name':'C','Class':'2'}]
>>> sum(x.get('Class') == '1' for x in xs)
2
答案 1 :(得分:3)
使用列表理解,检索符合条件的词典,然后计算其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
答案 2 :(得分:2)
不确定
a = [{'Name':'A','Class':'1'},{'Name':'B','Class':'1'},{'Name':'C','Class':'2'}]
print(len(filter(lambda x: x.get('Class')=='1' , a)))
输出:
2
答案 3 :(得分:1)
这是解决问题的旧时尚方式,但如果您想使用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