0

Python でネットワークを視覚化するための Pajek NET ファイルを作成しようとしています。私のアプローチは、1 つの 2 次元リストまたは dict を 2 つ目のキーとして使用し、値を置き換えるか、まったく新しいリストを作成することです。入力例:

Vertices = [('1', 'test.com'), ('2', 'testb.com'), ('3', 'testc.com'), ('4', '1.1.1.1'), ('5', '2.2.2.2'), ('6', '3.3.3.3')]

matches = [('test.com', '1.1.1.1'), ('test.com', '3.3.3.3'), ('test.com', '2.2.2.2'), ('testb.com', '3.3.3.3'), ('testc.com', '3.3.3.3')] 

その結果、一致する k と v の両方を Vertices の k に置き換えます。そのようにレンダリングされた出力リスト

Edges = [('1', '4'), ('1', '6'), ('1', '5'), ('2', 6'), ('3', '6')]

これに対処する方法については不明です。教祖からの洞察に感謝する

4

1 に答える 1

2

別のデータ構造を選択した場合、それは簡単です。

>>> Vertices = {'test.com': '1', 'testb.com': '2', 'testc.com': '3', '1.1.1.1': '4', '2.2.2.2': '5', '3.3.3.3': '6'}
>>> matches = [('test.com', '1.1.1.1'), ('test.com', '3.3.3.3'), ('test.com', '2.2.2.2'), ('testb.com', '3.3.3.3'), ('testc.com', '3.3.3.3')] 
>>> Edges = [(Vertices[v1], Vertices[v2]) for v1,v2 in matches]
>>> Edges
[('1', '4'), ('1', '6'), ('1', '5'), ('2', '6'), ('3', '6')]

独自のデータ構造を使用すると、複雑になります。

>>> Edges = []
>>> for item in matches:
...     for vertex in Vertices:
...         if vertex[1] == item[0]:
...             i = vertex[0]
...             break
...     for vertex in Vertices:
...         if vertex[1] == item[1]:
...             j = vertex[0]
...             break
...     Edges.append((i,j))
...
>>> Edges
[('1', '4'), ('1', '6'), ('1', '5'), ('2', '6'), ('3', '6')]
于 2013-07-24T21:12:48.317 に答える