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) は、頂点 i から頂点 j に X で重み付けされたエッジがある場合は 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( documentation ) を使用します。

>>> 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 に答える