背景
大きな辞書から、複数の特定のキーのみに絞った小さな辞書を作りたい、というケースがあった。
foo = {1:1, 2:2, 3:3, 4:4, 5:5}
# ↓ key_to_get = [1,2,5]
foo_filtered = {1:1, 2:2, 5:5}
結論
調べるとどうやらこうするのがいいらしい。
foo = {1:1, 2:2, 3:3, 4:4, 5:5}
key_to_get = [1,2,5]
foo_filtered = {key: val for key, val in foo.items() if key in key_to_get}
print(foo_filtered)
# {1: 1, 2: 2, 5: 5}
追記
@kfjt さんが指摘してくださいました!
以下のほうが簡潔ですね。
foo_filtered = {key: foo[key] for key in key_to_get}
key_to_getに、fooに存在しないkeyが入っているとKeyErrorがRaiseされると思うので、バグが入りこみにくいという点でもこっちのほうがいいかもしれないです。
ご指摘ありがとうございます!
ちなみに、辞書のkeyが存在しないときにデフォルト値を格納しておく方法も教えていただきました!
仕様に応じて使い分けですね。
foo_filtered = {key: foo.get(key, 0) for key in key_to_get}
文句 こういうことができると思っていた
pandas.DataFrameみたいに、こうできたらいいのになぁ。
foo_filtered = foo[[1,2,5]]
以上!