2013-09-25 51 views
0

我在本網站中找到了關於如何將列表轉換爲字典的建議。我已經成功地遵循它。但是我在執行從列表到詞典字典的轉換時感到震驚; like graph representation將列表轉換爲Python中的字典字典

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} 

這裏,鍵表示圖的頂點。

你可以請教我,如何解決這個問題?

謝謝

+3

你能解釋一下你的輸入和輸出更好? –

+0

因此,從頂點0到頂點1有一個加權爲0的邊。對吧? 這是如何從輸入中隱含的? –

+0

@OfirIsrael:我的權利。實際上,我從用戶處取得字符串輸入,並進行一些字符串到整數轉換並將輸入保存到列表中。現在我想將列表轉換成字典字典 – user2015915

回答

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.defaultdictdocumentation)像這樣:

>>> 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}}) 
+0

嘿,花了我一會兒。 –

+0

'None'可能比'-1'更佔位符。非數字的東西。 –

2

我轉換alredy列表成的矩陣形式[[0 1 2],[1 0 3],[2 2 0]]它給我的行長度,列length.But我再次得到了來襲如何做到這一點的字典prsentation

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) 
+0

您需要通過外部索引來過濾內部字典,以排除他顯然不需要的回送邊緣。 –

+0

@SilasRay - 謝謝! –

+0

@Robᵩ:比很多。但我沒有得到正確的輸出。我的輸入是:0,1,1,1,0,2,1,2,0,輸出應該是:{0:{1:1,2:1},1:{2:2},2: {}}。我知道這是一個相同的表示,我應得的。 THanx畢竟 – user2015915