好吧,这一直是我头疼的根源。我有一个列表,列表中的每个元素都是一个元组,每个元组正好包含两个元素(一个字符串和一个字典)。
这是一个可比较的列表:
list_of_tuples = [ ('one':{'a':'b'}), ('one':{'c':'b'}), ('two':{'a':'b'}), ('two':{'d':'e'}), ('three':{'d':'e'}) ]
我正在尝试构建一个网络图,在这种情况下,“一”、“二”和“三”对应于网络上的不同节点。每个节点上的每个接口都有一个元组。字典表示网络地址和子网掩码。对于要连接到另一个接口的接口(元组之一),两个接口共享相同的网络地址和子网掩码(它们的字典相同)。
最终,我希望得到一个新的元组列表,新元组的元素只是表示原始列表中连接接口的两个元组。
换句话说,我想得到这样的结果:
list_of_connections = [( ('one':{'a':'b'}),('two':{'a':'b'}) ), ( ('two':{'d':'e'}),('three':{'d':'e'}) )]
我正在试图弄清楚如何实现这一目标。有人对如何实现这一点有任何意见吗?请注意,目前,高性能并不是首要任务。原始列表并不总是必须正好包含 5 个接口,也不一定总是正好有两个连接。
编辑:
我想出了以下解决方案,尽管它的效率低于 Manoj 发布的解决方案。
connections = list()
for i in range(len(list_of_tuples)):
for k in range(len(list_of_tuples)):
if connections.count((list_of_tuples[k],list_of_tuples[i])) == 0 and ((list_of_tuples[i][1] == list_of_tuples[k][1]) and (list_of_tuples[i][0] != list_of_tuples[k][0])):
connections.append((list_of_tuples[i],list_of_tuples[k]))