python - 从单个行中的矩阵到字典

时间:2012-06-01 22:28:43

标签: python dictionary list-comprehension

  

矩阵

是具有相同长度的列表列表。我要返回表格的字典

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

其中键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=[]。输出应为:{}

我该如何处理?

3 个答案:

答案 0 :(得分: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)))
{}

答案 1 :(得分:4)

尝试更改部分" len(矩阵[0])" 如果矩阵为空,这将尝试查找不存在的索引。

取而代之的是

len(matrix [0])if matrix else 0

答案 2 :(得分: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