辞書のリストからキーの値が一致する数をカウントする方法
Pythonで辞書のリストから特定のキーの値が一致する数を数える簡単な方法として、collections.Counter
を使う方法があります。collections.Counter
は特定のキーの値の出現回数を数えることができます。
import collections
# 辞書のリスト
data = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
{"name": "Charlie", "age": 30},
{"name": "David", "age": 42},
]
# 'age'の値を数える
age_counter = collections.Counter(item["age"] for item in data)
print(age_counter) # Counter({30: 2, 25: 1, 42: 1})
# 'age'が30の数を取得
count_30 = age_counter[30]
print(count_30) # 2
キーの値が文字列のとき。
import collections
# 辞書のリスト
data = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
{"name": "Charlie", "age": 30},
{"name": "David", "age": 42},
]
# 'name'の値を数える
name_counter = collections.Counter(item["name"] for item in data)
print(name_counter) # Counter({'Alice': 1, 'Bob': 1, 'Charlie': 1, 'David': 1})
count_alice = name_counter['Alice']
print(count_alice) # 1
空のリストでも問題なく使えます。
import collections
# 空のリスト
data = [
]
name_counter = collections.Counter(item["age"] for item in data)
print(name_counter) # Counter()
# 'age'が0の数を取得
count_zero = name_counter[0]
print(count_zero) # 0
sum関数を利用したカウント方法
collections.Counter
でも可能ですが、値を1つだけ特定したい場合は、sum
関数とリスト内包表記を組み合わせて数えることもできます。
# 辞書のリスト
data = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 5},
{"name": "Charlie", "age": 30},
{"name": "David", "age": 0},
{"name": "David", "age": 6},
]
sum_david = sum(1 for item in data if item["name"] == 'David')
print(sum_david) # 2
辞書のリストから特定のキーの値が任意でないものの数を数える方法
上記を利用して任意の値以外の数をカウントできます。次の例では'age'
が0
以外の数をカウントしています。
# 辞書のリスト
data = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 5},
{"name": "Charlie", "age": 30},
{"name": "David", "age": 0},
{"name": "David", "age": 6},
]
age_num = sum(1 for item in data if item["age"] != 0)
print(age_num) # 4
辞書のリストから特定のキーの値を合計する方法
特定のキーの値が数値の場合のみ使うことができます。
# 辞書のリスト
data = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 5},
{"name": "Charlie", "age": 30},
{"name": "David", "age": 0},
]
sum_age = sum(item["age"] for item in data)
print(sum_age) # 65
条件を指定することで、任意の値を捨てることもできます。
sum_age = sum(item['age'] for item in data if item["age"] > 5)
print(sum_age) # 60