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

如何将NetworkX代码输出的多个字典合并为单一字典

问题

现有基于NetworkX的Python代码如下:

import networkx as nx
import math

G = nx.read_gml(".../networks/karate.gml",label=None)

X = nx.single_source_shortest_path_length(G,5,2)
t = 0 
for x in X:
    if (34,x) in G.edges() or (x,34) in G.edges():
        t += 1
    l = dict()
    l[x] = t + math.log10(5)
    print(l)

运行后会输出多个仅含单个键值对的字典:

{5: 1.6989700043360187}
{1: 1.6989700043360187}
{11: 2.6989700043360187}
{7: 3.6989700043360187}
{32: 4.698970004336019}
{2: 5.698970004336019}
{3: 6.698970004336019}
{4: 7.698970004336019}
{6: 8.698970004336019}

需要修改代码,将这些输出合并为一个完整的字典,预期输出如下:

{5: 1.6989700043360187, 1: 1.6989700043360187, 11: 2.6989700043360187, 7: 3.6989700043360187, 32: 4.698970004336019, 2: 5.698970004336019, 3: 6.698970004336019, 4: 7.698970004336019 ,6: 8.698970004336019}
解决方法

核心改动是将字典的初始化移到循环外部,避免每次循环新建空字典,而是在同一个字典中累加键值对,最后统一打印完整字典。修改后的代码如下:

import networkx as nx
import math

G = nx.read_gml(".../networks/karate.gml", label=None)

X = nx.single_source_shortest_path_length(G, 5, 2)
t = 0
# 初始化空字典,放在循环外
result_dict = {}
for x in X:
    if (34, x) in G.edges() or (x, 34) in G.edges():
        t += 1
    # 直接向结果字典添加键值对
    result_dict[x] = t + math.log10(5)
# 循环结束后打印完整字典
print(result_dict)

改动说明:

  • 把原循环内的l = dict()移到循环前,命名为result_dict更符合语义
  • 循环内不再新建字典,直接给result_dict赋值键值对
  • 移除循环内的print(l),改为循环结束后打印整个result_dict

运行后即可输出合并后的完整字典,符合预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:20:13