ここではPythonのリストについていくつかの記事を見てきましたが、私の質問に正解は見つかりません。それはコードを最適化するためです。Pythonの "inner join"リストのコードが遅い
私は2つのリストを比較するためのPythonコードを持っています。同じコードを見つけて、2番目の位置の値を変更する必要があります。最終的には完璧に動作しますが、時間がかかります。 SQLでは、このクエリは2分を要しません....しかし、ここでは15分を費やしています。だから、メモリの問題か悪いコードの問題か分かりません。
私は2つのリストを持っています。 最初の[code、points]です。 2番目の[コード、ライセンス] 最初のリストの最初の値(コード)が2番目のリスト(コード)の最初の値と一致する場合、それは、例えば、ライセンスが「これ」に等しい場合、最初のリスト(点)の第2の値を更新しなければならない:
itemswithscore = [5675, 0], [6676, 0], [9898, 0], [4545, 0]
itemswithlicense = [9999, 'ATR'], [9191, 'OPOP'], [9898, 'THIS'], [2222, 'PLPL']
for sublist1 in itemswithscore:
for sublist2 in itemswithlicense:
if sublist1[0] == sublist2[0]: #this is the "inner join" :)
if sublist2[1] == 'THIS': #It has to be license 'THIS'
sublist1[1] += 50 #I add 50 to the score value
最後に、私は、コード9868で更新リストを持っている:
itemswithscore = [5675, 0], [6676, 0], [9898, 50], [4545, 0]
事前に
二つのリストが80.000値の誰もが持っていることは事実である。.. :(
感謝!!!
素晴らしい!それは完璧で非常に速く動作します。私はそれが最善の解決策であると確信しています。 しかし、私は質問があります。あなたが言うとき:dct_scoreのkのための : もしdct_licenseなら。get(k)== 'これ' 'THIS'という値がキーや辞書の値に現れることがありますか? つまり、リストのような固定位置を指定することはできません。例えば、 itemswithscoreのサブリスト:sublist [1] –
その他の質問: 私は非常に大きなリスト(キー、値)を扱っています。 そして、私は、異なるクエリに応じて(リストの「値」部分に)多かれ少なかれスコアを与えるために多くのクエリを渡します。 リストの代わりに辞書を使用する方が良いでしょうか?リストでは、値 "列"を更新する方が簡単だと分かります。 itemswithscoreのサブリスト: sublist [1] + = 50ポイント –
dictsを使用する方が良いかもしれません。 'dct_scoreのkに対して:dct_score [k] + = 50' –