You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据node_pair匹配edge_list对应数值对?代码输出异常求助

问题解决:按节点对顺序匹配对应数值

你的代码问题在于遍历edge_list时,会按列表原有顺序添加匹配到的数值,完全忽略了node_pair的顺序要求。比如处理('b','a')时,依然先找到'a'对应的1,再找到'b'对应的11,所以结果还是[1,11];另外start_node = pair[0][0]是多余的,pair[0]已经是'a'或'b',无需再取索引0。

最优解决方案:构建映射字典

先创建一个orig-id到数值的映射字典,既可以快速查找,又能严格遵循node_pair的顺序输出结果:

node_pair = [('a', 'b'), ('b', 'a')]
edge_list = [
    (1, 'unuseful thing', {'orig-id': 'a'}),
    (11, 'unuseful thing', {'orig-id': 'b'}),
]

# 构建orig-id到数值的映射,仅需执行一次
id_to_num = {edge[2]['orig-id']: edge[0] for edge in edge_list}

for pair in node_pair:
    start_node = pair[0]
    end_node = pair[1]
    print(f'from {start_node} --> to {end_node}')
    # 按节点对顺序从字典中取值
    graph_start_end_node = [id_to_num[start_node], id_to_num[end_node]]
    print(graph_start_end_node)

执行结果:

from a --> to b
[1, 11]
from b --> to a
[11, 1]

这种方法的优势:

  • 映射字典仅需构建一次,当edge_list规模较大时,效率远高于重复遍历列表
  • 直接通过键值对查找,严格遵循节点对的顺序,不会出现顺序错误

替代方案:分两次遍历查找

如果不想使用字典,也可以修改遍历逻辑,先找起始节点对应数值,再找结束节点对应数值:

node_pair = [('a', 'b'), ('b', 'a')]
edge_list = [
    (1, 'unuseful thing', {'orig-id': 'a'}),
    (11, 'unuseful thing', {'orig-id': 'b'}),
]

for pair in node_pair:
    start_node = pair[0]
    end_node = pair[1]
    print(f'from {start_node} --> to {end_node}')
    
    graph_start_end_node = []
    # 先查找起始节点对应的数值
    for edge in edge_list:
        if edge[2]['orig-id'] == start_node:
            graph_start_end_node.append(edge[0])
            break  # 找到即退出循环
    # 再查找结束节点对应的数值
    for edge in edge_list:
        if edge[2]['orig-id'] == end_node:
            graph_start_end_node.append(edge[0])
            break
    
    print(graph_start_end_node)

该方案能解决顺序问题,但每个节点对都需要遍历两次edge_list,效率低于字典映射方案。

内容的提问来源于stack exchange,提问作者MaxDragonheart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:05:45