2012-06-01 53 views
1

矩陣蟒 - 從矩陣中一行字典

是具有相同長度的列表的列表。我已經返回其中關鍵我與一個元組的第i個從每個列表元素 匹配形式

{i:(l1[i],l2[i],...,lm[i])} 

的字典。 說

matrix=[[1,2,3,4],[9,8,7,6],[4,8,2,6]] 

太行:

>>> dict([(i,tuple(matrix[k][i] for k in xrange(len(matrix)))) for i in xrange(len(matrix[0]))])

做這項工作很好,輸出:

{0: (1, 9, 4), 1: (2, 8, 8), 2: (3, 7, 2), 3: (4, 6, 6)}

,但未能如果矩陣爲空:matrix=[]。輸出應該是:{}

我該如何處理?

+0

對不起來完成,最後的「K」實際上應該是0。我已經解決了這個問題。但是如果矩陣是空的,它仍然是問題。 – Sanich

回答

5

這個怎麼樣,而不是:

>>> matrix = [[1,2,3,4],[9,8,7,6],[4,8,2,6]] 
>>> dict(enumerate(zip(*matrix))) 
{0: (1, 5, 4), 3: (4, 8, 6), 2: (3, 7, 2), 1: (2, 6, 8)}  
>>> matrix = [] 
>>> dict(enumerate(zip(*matrix))) 
{} 
+0

在這個例子中,字典應該包含4個鍵(0,1,2,3),因爲所有內部列表的長度都是4.(內部列表的長度相同) – Sanich

+0

@Sanich:糟糕,我粘貼了錯誤的輸出, 等一下。 –

+0

@Sanich:我用'timeit'做了一些測試,上面的方法返回2.51秒的時間,而你發佈的返回的時間爲23.72秒。 –

4

嘗試改變部分「LEN(矩陣[0])」 這將嘗試查找,如果矩陣是空的,不存在的索引。

,而不是讓它

LEN(矩陣[0])如果矩陣其他0

+0

謝謝!這實際上是我正在尋找的解決方案。只是沒有找到這樣的條件的語法 – Sanich

0

如果你想要一個簡單的解決方案(而不是知道什麼地方錯了你的一個),我建議你使用一個列表,而不是的字典。從尺寸和鍵的角度看,矩陣是相當靜態的。

這可以簡單地通過zip(*matrix)

>>> matrix = [[1,2,3,4],[9,8,7,6],[4,8,2,6]] 
>>> dict_ = dict(enumerate(zip(*matrix))) 
>>> list_ = zip(*matrix) 
>>> for key_ in dict_: 
...  print dict_[key_] == list_[key_] 
... 
True 
True 
True 
True