Python:词典列表。根据字典键计算元素

时间:2017-01-15 05:40:35

标签: python list dictionary data-science

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

我有一个词典列表:

例如:

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

我想计算列表中包含&​​#39; Class' == 1.

没有循环可以做到吗?

编辑:

我尝试了以下内容:

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

4 个答案:

答案 0 :(得分:4)

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

答案 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