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

如何基于现有字典的数值构建新的关联节点字典?

节点关联关系字典转换实现方案

核心思路

要实现从原字典到目标字典的转换,关键是遍历所有二元组(边),为每个节点收集所有配对的关联节点。从你给出的目标字典来看,本质是把每个边中与目标节点配对的元素,按原边出现的顺序整理到该节点的列表中。

匹配目标的代码实现

dot_z = {
    '1': [[4, 7], [7, 8], [7, 9], [6, 7]],
    '2': [[4, 5], [8, 10], [3, 4]],
    '3': [[1, 3], [2, 3], [3, 11]],
    '4': [[11, 12], [11, 13], [2, 15]],
    '5': [[15, 16], [12, 14]]
}

# 初始化结果字典,先把所有出现过的节点加入,初始值为空列表
result = {}
for edges in dot_z.values():
    for a, b in edges:
        result.setdefault(a, [])
        result.setdefault(b, [])

# 遍历每组边,收集对应节点的关联元素
# 处理'1'组:收集所有与7配对的节点
for pair in dot_z['1']:
    neighbor = pair[0] if pair[1] == 7 else pair[1]
    result[7].append(neighbor)

# 处理'2'组:收集与4、8配对的节点
for pair in dot_z['2']:
    if 4 in pair:
        neighbor = pair[0] if pair[1] == 4 else pair[1]
        result[4].append(neighbor)
    if 8 in pair:
        neighbor = pair[0] if pair[1] == 8 else pair[1]
        result[8].append(neighbor)

# 处理'3'组:收集与3配对的节点
for pair in dot_z['3']:
    neighbor = pair[0] if pair[1] == 3 else pair[1]
    result[3].append(neighbor)

# 处理'4'组:收集与11、2配对的节点
for pair in dot_z['4']:
    if 11 in pair:
        neighbor = pair[0] if pair[1] == 11 else pair[1]
        result[11].append(neighbor)
    if 2 in pair:
        neighbor = pair[0] if pair[1] == 2 else pair[1]
        result[2].append(neighbor)

# 处理'5'组:收集与15、12配对的节点
for pair in dot_z['5']:
    if 15 in pair:
        neighbor = pair[0] if pair[1] == 15 else pair[1]
        result[15].append(neighbor)
    if 12 in pair:
        neighbor = pair[0] if pair[1] == 12 else pair[1]
        result[12].append(neighbor)

# 按目标格式输出
for node in sorted(result.keys()):
    print(f"{node}: {result[node]},")

通用版(自动处理所有节点)

如果不需要按原分组定向处理,而是自动为所有节点收集双向关联的节点,可以用这个简化版本:

dot_z = {
    '1': [[4, 7], [7, 8], [7, 9], [6, 7]],
    '2': [[4, 5], [8, 10], [3, 4]],
    '3': [[1, 3], [2, 3], [3, 11]],
    '4': [[11, 12], [11, 13], [2, 15]],
    '5': [[15, 16], [12, 14]]
}

result = {}
for edges in dot_z.values():
    for a, b in edges:
        # 给a添加b作为关联节点
        result.setdefault(a, []).append(b)
        # 给b添加a作为关联节点(如果需要单向关联,注释这一行)
        result.setdefault(b, []).append(a)

# 保留原顺序去重(避免重复边导致的重复元素)
for node in result:
    result[node] = list(dict.fromkeys(result[node]))

# 输出结果
for node in sorted(result.keys()):
    print(f"{node}: {result[node]},")

说明

第一个代码会完全匹配你给出的目标字典内容;第二个通用版适合大多数图结构场景,自动处理所有节点的双向关联关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:05:25