2017-06-08 3 views
-1

で辞書から値のペアが、私は次のようにのようなPythonの辞書ですがありますキーを選択:Pythonの

a = {"a":1,"b":2,"c":3,"f":4,"d":5} 

を、私は次のようにのようなリストを持っている:

b= ["b","c"] 

私がしたいですキーを選択しています:dict aの値のペアとbのキー。私は単に別の辞書を作成し、キー使用して、それを更新することができ

out = {"b":2,"c":3} 

:反復と値のペアを私はRAMの問題があり、辞書aが非常に大きい だから出力は辞書のようにする必要があります。 bはいくつかのポイントを含んでいるので、私はaから飛び降りることはうまくいかないと思った。この問題を解決するために私は何ができますか?

編集:アウトは、実際にはaのアップデートです。そこで私はaを更新します。あなたがexsisting辞書を・修正に問題がない場合は

感謝:)

+3

どのように行っても、別の辞書を作成するとメモリが必要になります。あなたの__real__問題をご記入ください – e4c5

+0

何を試しましたか? –

+1

もし 'b'が非常に短いとRAMの問題があってはならないし、両側から勝つことはできません。 – harshil9968

答えて

1

は、この方法を試してください。

out = {} 
for key in b: 
     out[key] = a.pop(key) 

私たちがしているように、このは、余分なスペースを取ることはありません古いものから新しいdictに必要な値を転送して、遅い選択的なポッピングの問題も解決します(必要な選択的なものだけを通過するわけではありません)。

+0

辞書aが大きすぎてbが小さいので、私はほとんどのキーを削除します。したがって、これにはもう少し時間がかかります。だから私は@Chris Muellerの解決策を選んだ。ありがとう:) – uhuuyouneverknow

+0

@uhuuyouneverknowあなたは解決策を読んでください、これは私が古いdictから取り除いているので、これは同じ時間の複雑さ+低RAMです。 – harshil9968

+0

@uhuuyounever私たちは両方とも 'b'でループしているので、時間の複雑さは同じです。 – harshil9968

2

リスト内のキーを使用して新しい辞書を作成したい場合は、dictの理解度を使用できます。

a = {"a":1,"b":2,"c":3,"f":4,"d":5} 
b = ["b", "c"] 

out = {x: a[x] for x in b} 

bの要素のいずれかが実際にaのキーでない場合、これはKeyErrorを上げることによって失敗します。あなたがこれを行うことができます

+0

あなたはRAMの問題に答えませんでした。 – harshil9968

1

a = {"a":1,"b":2,"c":3,"f":4,"d":5} 
b= ["b","c"] 

out = {item:a.get(item)for item in b} 

これは任意のエラーが発生しませんが、項目がでない場合は''を追加します。