関連する一致であるタプルの値をペアにしました(技術的にはまだCSVファイルにあります)。ペアになった値はどちらも一意である必要はありません。
tupleAB = (A####, B###), (A###, B###), (A###, B###)...
tupleBC = (B####, C###), (B###, C###), (B###, C###)...
tupleAC = (A####, C###), (A###, C###), (A###, C###)...
私の理想的な出力は、一意の ID と「強化された」一致のリストを持つ辞書です。私がそれについて考えようとしているのは、グラフベースのコンテキストです。
たとえば、次の場合:
tupleAB[x] = (A0001, B0012)
tupleBC[y] = (B0012, C0230)
tupleAC[z] = (A0001, C0230)
これにより、次が生成されます。
output = {uniquekey0001, [A0001, B0012, C0230]}
理想的には、これは 3 つ以上のタプルにスケールアップすることもできます (たとえば、AD、BD、および CD の 3 つのタプルと 4 つの項目の長さのリストを追加する "D" マッチを追加すると、前方へ)。
より多くのタプルへのスケールアップに関しては、必ずしも完全に接続されていない「グラフ」、つまり、すべてのノードが他のすべてのノードに接続されているとは限りません。私の推測では、リストの長さに基づいて簡単にフィルター処理できます。私はどんな提案にもオープンです。
数杯のコーヒーで力ずくの解決策を考え出すことができると思いますが、もっと洗練された解決策を知っている人がいないかコミュニティに尋ねてみようと思いました。フィードバックをお寄せいただきありがとうございます。
明確にするために編集1:グラフのコンテキストでは、サイクル検出(http://en.wikipedia.org/wiki/Cycle_detection_(graph_theory)#Cycle_detection)という、うまくいくと思われるアプローチを見つけました。これが誰にとってもベルを鳴らすなら、タプルのペアの値から構築されたグラフでサイクルを特定しようとしていると思います。
編集 2: OK、ここに計画があります: 1) csv ファイルを取得し、グラフ分析用の入射行列を作成します 2) 入射行列の各ノードで深さ優先検索を実行します (元のノードで終了してサイクルを完了します) 3) 最大化を試みます一意の「文字」 (A、B、C など - 私の場合、文字は種を表します) 4) これらの最大種の深さ優先検索は辞書のリストです