次のように構築された辞書があるとします。
d={0:1, 1:2, 2:3, 10:4, 11:5, 12:6, 100:7, 101:8, 102:9, 200:10, 201:11, 202:12}
そして、私はサブディクショナリーを作成したいと思いますd1
d
をd1
には次のキーが含まれています:0, 1, 2, 100, 101, 102
。最終的な出力は次のようになります。
d1={0:1, 1:2, 2:3, 100:7, 101:8, 102:9}
実際のディクショナリに2,000,000を超えるアイテムが含まれている場合、Pythonで効率的な方法はありますか?
この質問は、スライスが特定の不等式ルールに従う必要がある場合、および最終結果が同じ辞書にまとめられたスライスの束。
辞書内包表記は次のもので使用できます。
_d = {0:1, 1:2, 2:3, 10:4, 11:5, 12:6, 100:7, 101:8, 102:9, 200:10, 201:11, 202:12}
keys = (0, 1, 2, 100, 101, 102)
d1 = {k: d[k] for k in keys}
_
python 2.7では、(python 3.x replace it.ifilter(...)
by filter(...)
)でキーを計算することもできます:
_import itertools as it
d = {0:1, 1:2, 2:3, 10:4, 11:5, 12:6, 100:7, 101:8, 102:9, 200:10, 201:11, 202:12}
d1 = {k: d[k] for k in it.ifilter(lambda x: 1 < x <= 11, d.keys())}
_
サブ辞書を作成する簡単な方法の1つは、operator.itemgetter
を使用することです。この関数は複数の引数を取り、指定されたイテラブルの対応する要素を含むタプルを返す新しい関数を返します。
from operator import itemgetter as ig
k = [0, 1, 2, 100, 101, 102]
# ig(0,1,2,100,101,102) == lambda d : (d[0], d[1], d[2], d[100], d[101], d[102])
d1 = dict(Zip(k, ig(*k)(d)))