2013-09-22 5 views

答えて

7

ありますどの程度

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秒のリストの使用。これはかなり確立されたテクニックであり、おそらくStackOverflowのいくつかの質問に現れます。

list.count(x)を利用する方法はありません。この方法では、発生件数がxであるため、完全な辞書になる可能性があります。 Pythonにはfilterというメソッドがありますが、理解が非常に好ましいです。

+0

私は答えの最後の行にあなたのメッセージを理解していない - Pythonの学習者。 –

+2

私は '和([におけるX 1])'書き込みと 'A'が巨大なリストであり、リストの理解は、理論的1Sの膨大なリストを生成する場合、THENそれらすべてを合計します。しかし、私は '次いで1SはA'が大きい構造を実現することなく、上の反復されている'として合計される(Aはxについて1) '和を書けば。 –

+0

今すぐダウンロード!私にとって非常に有益な情報です。どうもありがとうございます。あなたが言う –

6

私はレイの答え@好きです。別のクールなトリックは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 
関連する問題