私は辞書の3つのリスト、A、BおよびCの彼らは次のようになります:辞書リストをAリストにマッチさせて、リストBをリストBに、PythonのAとCの共通のプロパティを持つリストBにしますか?
A = [{propA1: valueA1}, {propA1: valueA2}, ...]
B = [{propB1: valueB1, propB2: valueB2}, {propB1: valueB3, propB2: value4}, ...]
C = [{propC1: valueC1}, {propC1: valueC2}, ...]
propA1
とpropB1
はpropB2
とpropC1
が同様に同じ性質で、同じ性質が異なる名前です。しかし 、propA1
とpropB1
は常に同じ値を持っていないが、私は、配列[valueA1, valueA2, ...]
と[valueB1, valueB2, ...]
の「設定交差」で唯一興味を持って、ここでの目標は次のとおりです。私はB
などからすべてのpropB2
を返すようにしたいという彼らのpropB1
対応(同じ辞書にある)は、AのpropA1
と一致します。と一致するように設定されたpropC1
は、C
となります。私が試してみました何
:このループの終わりに
propB2_match = set()
for elementB in B:
for elementA in A:
if elementB['propB1'] == elementA['propA1']:
propB2_match(elementB['propB2'])
break
は、私がpropC1
と一致するために使用できるpropB2
のすべてを含むpropB2_match
持っています。 しかし、ループからわかるように、これは高価なO(n^2)
ループです。 O(n)
でこれを処理する方法があるのでしょうか?そうでない場合は、pythonの最適化を行うことができますか?
注:データベースに配置し、リレーショナルデータベースSQLを使用して結合操作を処理する必要はありません。
太字のセクションをもう一度読むことはできますか?propB1がpropB1と一致するようにprobA1(通知pr opとprob)、あなたが以前に言ったことを与えて、なぜvalueB2とvalueB1が再評価されるのでしょうか? – PyNEwbie
基本的には "join"を実装することができます。 'valueA1'を要素' {propA1:valueA1} 'にマッピングする新しいdict A 'を作成し、' valueB1'を要素{{propB1:valueB1、propB2:valueB2} 'にマッピングする新しいdict B'を作成し、結果に 'itertools.groupBy'があります。 – spiffman
@PyNEwbie私の質問が更新されました。 –