2017-01-15 22 views
-2

DictReaderを使用してcsvファイルを読みました。Python:辞書のリスト。

私は辞書のリストを持っている:

例:

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

私は「クラス」== 1.

がそれですしているリスト内のエントリの数をカウントしたいですループなしでそれを行うことは可能ですか?

EDIT:sumを使用して

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

It lo私たちにあなたのためのコードを書いてほしいと思っています。多くのユーザーは、苦労しているコーダーのコードを作成したいと考えていますが、通常、ポスターが既に問題を解決しようとしているときにのみ役立ちます。この努力を実証する良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、期待される出力、実際に得られる出力(出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性のある回答が増えます。 [FAQ](http://stackoverflow.com/tour)と[How to Ask](http://stackoverflow.com/questions/how-to-ask)を確認してください。 – TigerhawkT3

答えて

2

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 
+0

@DYZエラーが発生するのではなく、キーがない場合はNoneを返します。 – MYGz

+0

@MYGz、 'dict.get'を使うことは、' KeyError'を防ぐためです。私が知っているのは – falsetru

+0

です。 DYZはそれについて尋ねていました。 – MYGz

2

確かに:私は次のことを試してみました

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

O utput:

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 
1

辞書は、あなたの条件に一致する計算取得するために、同様にリストの内包を使用して、そのlen

>>> len([d for d in a if d.get('Class')=='1']) 
2 

EDIT: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