Pythonで辞書をフィルタリング(辞書内包表記)
この記事では、Pythonの辞書内包表記を使って辞書をフィルタリングする方法を説明します。条件を満たすキーと値のペアだけを残した新しい辞書を作成する方法を学びます。
目次
辞書内包表記によるフィルタリング
Pythonの辞書内包表記は、既存の辞書から新しい辞書を作成する簡潔で効率的な方法です。条件式を使って、特定のキーと値のペアだけを選択的に抽出できます。
original_dict = {"a": 1, "b": 2, "c": 3, "d": 4}
filtered_dict = {k: v for k, v in original_dict.items() if v > 2}
print(filtered_dict)
上記の例では、値が2より大きいキーと値のペアのみを含む新しい辞書`filtered_dict`が作成されます。`if v > 2`という条件式が、フィルタリングの役割を果たします。
具体的な例
いくつかの具体的な例を見てみましょう。
# 偶数の値を持つキーと値のペアを選択
original_dict = {k: v for k in range(10) if k%2 == 0}
filtered_dict = {k: v for k, v in original_dict.items() if v%2 == 0}
print(filtered_dict)
# 文字列の長さが3文字以上のキーを持つ辞書
original_dict = {"apple": 1, "banana": 2, "kiwi": 3}
filtered_dict = {k: v for k, v in original_dict.items() if len(k) >= 3}
print(filtered_dict)
これらの例では、異なる条件式を使って、様々な方法で辞書をフィルタリングしていることがわかります。
複雑な条件の適用
辞書内包表記では、複数の条件を組み合わせた複雑な条件式も使用できます。
original_dict = {"apple": 1, "banana": 2, "kiwi": 3, "orange": 4}
filtered_dict = {k: v for k, v in original_dict.items() if len(k) >= 5 and v % 2 == 0}
print(filtered_dict)
この例では、キーの長さが5文字以上で、かつ値が偶数のキーと値のペアのみを選択しています。
ネストされた辞書のフィルタリング
ネストされた辞書もフィルタリングできます。ただし、ネストされたレベルに応じて、条件式を調整する必要があります。
original_dict = {"a": {"x": 1, "y": 2}, "b": {"x": 3, "y": 4}}
filtered_dict = {k: {inner_k: inner_v for inner_k, inner_v in v.items() if inner_v > 1} for k, v in original_dict.items()}
print(filtered_dict)
この例では、内側の辞書の値が1より大きいキーと値のペアのみを選択して、新しいネストされた辞書を作成します。
関連記事
- Pythonで辞書を作成(dict, 辞書内包表記)
- Pythonで辞書に要素を追加・更新(update, 辞書[key] = value)
- Pythonで辞書のキー・値を取得(keys, values, items)
- Pythonで辞書のキーの存在を確認(in演算子, get)
- Pythonで辞書をループ処理(for key in dict, for key, value in dict.items())
- Pythonで辞書をコピー(copy, deepcopy)
- Pythonで辞書を結合(update, {**dict1, **dict2} (Python 3.5以降))
- Pythonで辞書から要素を削除(pop, popitem, del)
- Pythonで辞書をJSONに変換(json.dumps)
- PythonでJSONを辞書に変換(json.loads)