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

Python: List of dictionaries. Count elements based on key of dictionary

我使用 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)

使用sum with 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

当然可以:

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

输出:

2

这是解决问题的老办法,但如果您想使用 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

也使用列表理解来检索符合您的条件的词典,然后计算其 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