【问题标题】:Reading from a .txt file and creating a nested dictionary python从 .txt 文件中读取并创建嵌套字典 python
【发布时间】:2016-03-28 18:54:49
【问题描述】:

我是 python 新手,需要一些关于字典的帮助。我有一个文本文件

1;2;0.0008131  
1;714;0.0001097  
714;715;0.0016285  
715;796;0.0014631  
... 

用成本表示图中的源节点和目标节点。我想读取文件并创建格式的字典

{'1': {'2': 0.0008131, '714': 0.0001097},
        '2': {'1': 0.0008131, '523': 0.0001097},
        '3': {'252': 0.0001052, '613':0.0002097},

对于每个节点以及它们之间的每个相邻节点和成本,依此类推。

【问题讨论】:

  • 你能展示一下你的代码尝试吗?解释目前不适合你的地方。使用堆栈跟踪显示任何错误消息(如果有)。
  • 由于 1 -> 2 与 2 -> 1 相同,您可能需要一个自定义的 __getitem__() 方法,该方法按升序对两个数字进行排序,并在内部仅存储 1 -> 2 的成本.
  • 我希望图形结构像一个邻接列表,每个键都有其他相邻节点及其成本。

标签: python file dictionary


【解决方案1】:

我认为下面的简单代码应该适合你。

# Open your text file
f = open('file.dat')

# Create empty dictionary 
graph = {}

for line in f:
    x = line.rstrip().split(";")
    if not x[0] in graph:
        graph[x[0]] = {x[1] : x[2]}
    else:
        graph[x[0]][x[1]] = x[2]

    if not x[1] in graph:
        graph[x[1]] = {x[0] : x[2]}
    else:
        graph[x[1]][x[0]] = x[2]

print(graph)

graph 是您想要的最终字典。

【讨论】:

  • cosole 说:graph[x[0]] = {x[1] : x[2]} "IndexError: list index out of range"
  • 您的文件的每一行是否正好有 3 列?如果我使用您在开始时提供的几行文本文件,我的代码会给我所需的输出。
  • 你是对的,1行有一个特殊字符,修复它。感谢您的帮助,但有没有办法从成本中删除 '\n' ?我将此图用作 Dijkstra 最短路径计算的输入。我是否需要将第 3 列转换为整数类型或类似的类型?
  • \n 不应出现在成本中。我猜在for循环的第一行,你没有使用line.rstrip()
  • 哦,是的,顺便说一句,python 中是否有任何类型器转换?因为我希望将第三列项目添加为双倍
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多