Pythonでdictをfilterするには次のようにします。
output_dict = dict(filter(lambda item: 条件式, input_dict.items()))
例えばdictの中から値が偶数であるものだけを取り出すには
input_dict = {"hoge": 1, "piyo": 2, "foo": 3, "bar": 4}
output_dict = dict(filter(lambda item: item[1] % 2 == 0, input_dict.items()))
print(output_dict) # {'piyo': 2, 'bar': 4}
のようにします。
仕組み
filterは第1引数に与えられた関数を第2引数で与えられたシーケンス1つ1つに適応し、Trueになったシーケンスのみを返す関数です。
上の例では第1引数の関数としてlambda式が与えられています。lambda式でdictのitem(keyとvalueのタプル)を受け取り、item[1]
のようにしてvalueにアクセスしています。
もしdictのkeyでフィルタリングしたい場合はitem[0]
のようにすればできます。例えば特定のkeyのみを含むdictを取り出したい場合は下のようにします。
input_dict = {"hoge": 1, "piyo": 2, "foo": 3, "bar": 4}
keys = set(["hoge", "piyo"])
output_dict = dict(filter(lambda item: item[0] in keys, input_dict.items()))
print(output_dict) #{'hoge': 1, 'piyo': 2}
コメント