我有一个字典列表(缩写)。
my_list = [{ 'id':1, 'val':123 }, {'id':2, 'val':456 }, {'id':2, 'val':789 }]
如何计算具有特定键的指定值的字典的出现次数(在本例中为“ id
”)?有没有办法利用计数(my_list.count('id' = 1)
?!?)
我有一个字典列表(缩写)。
my_list = [{ 'id':1, 'val':123 }, {'id':2, 'val':456 }, {'id':2, 'val':789 }]
如何计算具有特定键的指定值的字典的出现次数(在本例中为“ id
”)?有没有办法利用计数(my_list.count('id' = 1)
?!?)
怎么样
sum(1 for d in my_list if d.get('id') == the_value_you_are_interested_in)
>>> my_list = [{ 'id':1, 'val':123 }, {'id':2, 'val':456 }, {'id':2, 'val':789 }]
>>> sum(1 for d in my_list if d.get('id') == 1)
1
>>> sum(1 for d in my_list if d.get('id') == 2)
2
>>> sum(1 for d in my_list if d.get('id') == 20)
0
注意使用生成器而不是 1 的列表。这是一种非常成熟的技术,可能出现在几个 Stack Overflow 问题上。
我看不到任何利用的方法,list.count(x)
因为此方法计算 的出现次数x
,在您的情况下,这将是完整的字典。Python 确实有一个filter
方法,但更喜欢推导式。
我喜欢@Ray 的回答。另一个很酷的技巧是使用collections.Counter
.
from collections import Counter
c = Counter( item for dct in my_list for item in dct.items() )
c
=> Counter({('id', 2): 2, ('val', 123): 1, ('id', 1): 1, ('val', 456): 1, ('val', 789): 1})
c[('id', 2)]
=> 2
c[('id', 1)]
=> 1
c[('id', 20)]
=> 0
如果您需要计算多个键/值,此解决方案特别好。
如果你只关心一个特定的键,你可以这样做:
k = 'id'
id_counter = Counter( dct.get(k) for dct in my_list )
id_counter
=> Counter({2: 2, 1: 1})
id_counter[2]
=> 2