我在这个网站上发现了一些关于如何将列表转换为字典的建议。我已经成功地关注了它。但是我在执行从列表到字典的转换时感到震惊;像图形表示
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}
这里,键代表图的顶点。
你能告诉我,如何解决这个问题吗?
谢谢你
我在这个网站上发现了一些关于如何将列表转换为字典的建议。我已经成功地关注了它。但是我在执行从列表到字典的转换时感到震惊;像图形表示
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}
这里,键代表图的顶点。
你能告诉我,如何解决这个问题吗?
谢谢你
我已经将列表转换为 [[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)
首先,您需要以不同的方式表示图形。用户输入应该是一个矩阵。
如果从顶点 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}})