辞書のリストからキーの値が一致する数をカウントする方法

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
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です