0

我正在尝试为 python 中的网络可视化构建 Pajek NET 文件。我的方法是使用一个二维列表或 dict 作为第二个的键,然后替换值或完全创建一个新列表。示例输入:

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 回答