0

我在这个网站上发现了一些关于如何将列表转换为字典的建议。我已经成功地关注了它。但是我在执行从列表到字典的转换时感到震惊;像图形表示

    I/p: 0,0,1,1,0,4
    o/p: 0:{1:0,2:1}---------------------->1:0 means 1 is vertex and 0 is weight
         1:{0:1,2:4}

这里,键代表图的顶点。

你能告诉我,如何解决这个问题吗?

谢谢你

4

2 回答 2

2

我已经将列表转换为 [[0 1 2],[1 0 3],[2 2 0]] 的矩阵形式,它给了我行长,列长。但我再次被如何做这本字典演示文稿所震惊

mx = [[0, 1, 2],[1, 0, 3],[2, 2, 0]]
md = { i:
       { j:v for (j,v) in enumerate(sublist) if i != j }
       for (i,sublist) in enumerate(mx)
     }
print (md)
于 2013-09-25T14:05:18.007 回答
2

首先,您需要以不同的方式表示图形。用户输入应该是一个矩阵。

如果从顶点 i 到顶点 j 有一条边加权 X,则矩阵中的项目 (i,j) 应该是 X,如果没有,则应该是(假设)“-1”。(当然,这都是可以互换的)。

    0    1    2

0  -1    0    1

1   1   -1    4

2   1    4   -1

所以输入字符串应该是这样的: -1,0,1;1,-1,4;1,4,-1

之后,像这样使用collections.defaultdict文档):

>>> d = defaultdict(dict)
>>> input = '-1,0,1;1,-1,4;1,4,-1'
>>> lst = map(lambda x: map(lambda y: int(y), x.split(',')), input.split(';'))
>>> for i,j in enumerate(lst):
...     for k,l in enumerate(j):
...             d[i][k] = l
...
>>> d
defaultdict(<type 'dict'>, {0: {0: -1, 1: 0, 2: 1}, 1: {0: 1, 1: -1, 2: 4}, 2: {
0: 1, 1: 4, 2: -1}})
于 2013-09-25T14:14:25.760 回答