0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[python] 辞書型(dict)のフィルタ方法 (特定の複数キーのみに絞る)

Last updated at Posted at 2021-04-20

背景

大きな辞書から、複数の特定のキーのみに絞った小さな辞書を作りたい、というケースがあった。

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]]

以上!

0
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?