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
我使用 DictReader
.
我有一个词典列表:
例如:
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