こんにちは皆さん:私は今、Pythonの非常にトリックの問題があります。どのように修正するのか分かりません。Pythonのdictのサブセットを変更してください
問題はあるが、以下:
私はdictの()、のはそれを呼ぶことがありますD. Dのキーは、単位正方形の中心の座標を表し、整数(i、j)のペアがあり、 (i、j)に対応する値は色( 'r'、 'g'、 'b')の1つです。
私は2x2の正方形はすべて「赤」ので、私は書くために持っている、「青」に自分の色を変更した場合であれば、頻繁にチェックする必要があり、私のプログラムで:
if (D[(i, j)] == 'red'
and D[(i, j+1)] == 'red'
and D[(i+1, j)] == 'red'
and D[(i+1, j+1)] == 'red'):
D[(i, j)] = .. = 'blue'
まあ、本当状況はより複雑であり、上記は一例に過ぎない。
私はこの種のコードを何度も書く必要があります:すべて赤、すべて青、若干青、赤、....私は狂っています!ブロックする値を再割り当てするときに、元のセットが変更されないのでので、私はこれが動作しないコースの
block = [[D[(i,j)], D[(i, j+1)], D[(i, j+1)], D[(i+1, j+1)]]
if block == ['red', 'red', 'red', 'red']:
block = ['blue', 'blue', 'blue', 'blue']
を書くことにした:D [(I、J)] 『赤」秒をまだ』。
私の質問は、私の状況でサブセットを効率的に変更する方法です。より正確に言えば、私はいくつかの(キー、値)ペアをdictから取り出し、一時変数(またはデータ構造)に格納し、これらの変数をチェックして変更し、元のdictを変更することを望みます変数。しかし、それはいつも私が期待していたものとは別の方法で働いていた
は、いずれかの操作を行うdeepcopyだろうかより良い/異なる?元のコピーではなくコピーをまだ変更しています...実際にコピーがオリジナルから完全に切り離されていることを確認しているので、実際にはコピーは悪化する可能性があります。 – Julien
最初の例で '=='を使って割り当てようとしています。他のものはどちらも動作できません。何をしたいですか?辞書の値を変更しますか?その場合、 'ブロック'を作成すると助けになることはありません。そして、なぜディクテーションの代わりに2D配列を作成しないのですか? –
@ Jean-FrançoisFabre:これは私の状況を単純化したものに過ぎず、実際のプログラムははるかに複雑で、説明するのに多くの言葉が必要です。私はちょうどdictの部分をより効率的に変えたいと思う。 –