Pythonで辞書から負の値を除外する2つの方法(forループとlambda関数)
データ分析を行っていると、辞書から負の値を取り除きたいという場面によく出会います。これを実現するには、辞書内の各要素をループで処理し、条件を使って値をチェックする必要があります。本記事では、この処理を実装できる2つのアプローチを紹介します。
forループを使用する方法
まずは、forループを使って辞書の要素を順番に処理する方法です。各反復処理の中で items() 関数を使い、要素の値と0を比較することで、負の値かどうかを判定します。
サンプルコード
dict_1 = {'x':10, 'y':20, 'z':-30, 'p':-0.5, 'q':50}
print ("元の辞書 :", str(dict_1))
final_res_1 = dict((i, j) for i, j in dict_1.items() if j >= 0)
print("負の値を除外した後の辞書 : ", str(final_res_1))
実行結果
上記のコードを実行すると、次のような結果が得られます。
元の辞書 : {'x': 10, 'y': 20, 'z': -30, 'p': -0.5, 'q': 50}
負の値を除外した後の辞書 : {'x': 10, 'y': 20, 'q': 50}
この例では、辞書内包表記(ジェネレータ式)と組み合わせることで、条件 j >= 0 を満たすキーと値のペアだけを新しい辞書として再構築しています。値が0以上の要素のみが残り、-30 や -0.5 といった負の値を持つ要素は除外されていることがわかります。
lambda関数を使用する方法
次に、lambda関数を使った方法を紹介します。lambda関数を利用すると、より短く簡潔な構文で同じ処理を書くことができます。ロジック自体は先ほどのforループの例と同じですが、filter() 関数とlambda関数を組み合わせて実装します。
サンプルコード
dictA = {'x':-4/2, 'y':15, 'z':-7.5, 'p':-9, 'q':17.2}
print ("\n元の辞書 :", dictA)
final_res = dict(filter(lambda k: k[1] >= 0.0, dictA.items()))
print("負の値を除外した後の辞書 : ", str(final_res))
実行結果
上記のコードを実行すると、次のような結果が得られます。
元の辞書 : {'x': -2.0, 'y': 15, 'z': -7.5, 'p': -9, 'q': 17.2}
負の値を除外した後の辞書 : {'y': 15, 'q': 17.2}
filter() 関数に渡されたlambda関数では、k[1](つまり辞書の値)が 0.0 以上であるかどうかを判定しています。条件を満たす要素のみが残され、最終的に dict() 関数によって新しい辞書に変換されます。
まとめ
どちらの方法でも、辞書から負の値を簡単にフィルタリングできます。
- forループ方式:可読性が高く、初心者にも理解しやすい。処理の流れを細かく制御したい場合に適しています。
- lambda関数方式:コードが短く簡潔になり、関数型プログラミングのスタイルに慣れている方にはおすすめです。
状況やチームのコーディングスタイルに応じて、使いやすい方を選択してください。なお、Python 3では辞書内包表記を使って {i: j for i, j in dict_1.items() if j >= 0} のように書くこともでき、こちらも非常に読みやすい選択肢の一つです。
-
Pythonの辞書からすべてのキーをリストとして取得する方法
Pythonの辞書(dict)からすべてのキーをリストとして取得したい場合、最もシンプルな方法は dict.keys() メソッドを使うことです。このメソッドは辞書内のすべてのキーを含むビューオブジェクトを返すため、list() で囲むことで簡単にリストへ変換できます。keys()メソッドを使う例my_dict = {name: TutorialsPoint, time: 15 years, location: India} key_list = list(my_dict.keys()) print(key_list)出力実行すると、次のような結果が得られます。[name, time, loc
-
Pythonで辞書のすべての値を取得・出力する方法
Pythonの辞書(dict)オブジェクトには、すべての値を簡単に取得できるvalues()メソッドが標準で用意されています。このメソッドを呼び出すと、辞書に格納された全ての値が dict_values オブジェクトとして返されます。values()メソッドを使う基本的な方法以下の例では、辞書 D1 のすべての値を values() メソッドで取得しています。戻り値はビューオブジェクトのため、リストとして扱いたい場合は list() 関数で変換すると便利です。>>> D1 = {1:a, 2:b, 3:c} >>> D1.values() dict_valu