Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-单行从矩阵到字典_Python_Dictionary_List Comprehension - Fatal编程技术网

python-单行从矩阵到字典

python-单行从矩阵到字典,python,dictionary,list-comprehension,Python,Dictionary,List Comprehension,母体 是具有相同长度的列表的列表。我得退一本这种形式的词典 {i:(l1[i],l2[i],...,lm[i])} 其中键i与第i个元素的元组匹配 从每个列表中。 说 所以这句话: >dict([(i,元组(矩阵[k][i]表示xrange中的k(len(矩阵)))表示xrange中的i(len(矩阵[0]))))) 工作做得很好,并输出: {0:(1,9,4),1:(2,8,8),2:(3,7,2),3:(4,6,6)} 但如果矩阵为空,则失败:matrix=[]。输出应该是:{} 我该怎么

母体

是具有相同长度的列表的列表。我得退一本这种形式的词典

{i:(l1[i],l2[i],...,lm[i])}
其中键i与第i个元素的元组匹配 从每个列表中。 说

所以这句话:

>dict([(i,元组(矩阵[k][i]表示xrange中的k(len(矩阵)))表示xrange中的i(len(矩阵[0])))))

工作做得很好,并输出:

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

但如果矩阵为空,则失败:
matrix=[]
。输出应该是:
{}


我该怎么处理

换成这个怎么样:

>>> 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)))
{}

这个怎么样

>>> 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)))
{}
尝试更改零件“len(矩阵[0])” 如果矩阵为空,这将尝试查找不存在的索引

取而代之的是成功

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

取而代之的是成功


len(矩阵[0])如果矩阵else 0

如果您想要一个简单的解决方案(而不是知道您的解决方案有什么问题),我建议您使用列表而不是dict。因为矩阵在大小和键方面是相当静态的

这可以通过
zip(*matrix)


如果你想要一个简单的解决方案(而不是知道你的解决方案出了什么问题),我建议你使用列表而不是dict。从矩阵的大小和键来看,它是相当静态的

这可以通过
zip(*matrix)


抱歉,最后一个“k”实际上应该是0。我已经修好了。但是如果矩阵是空的,问题仍然存在。对不起,最后一个“k”实际上应该是0。我已经修好了。但是如果矩阵是空的,这仍然是个问题。在这个例子中,字典应该包括4个键(0,1,2,3),因为所有内部列表的长度都是4。(内部列出了相同的长度)@Sanich:I使用
timeit
进行了一些测试,上面的方法返回的时间为2.51s,而您发布的方法返回的时间为23.72s。是否保证“zip()”按原始顺序返回元组,以便“enumerate()”进行正确匹配?@Sanich:Yes。从文档中:“[zip()]返回元组列表,其中第i个元组包含每个参数序列或iterables中的第i个元素。”在本例中,字典应包括4个键(0,1,2,3),因为所有内部列表的长度都是4。(内部列出了相同的长度)@Sanich:I使用
timeit
进行了一些测试,上面的方法返回的时间为2.51s,而您发布的方法返回的时间为23.72s。是否保证“zip()”按原始顺序返回元组,以便“enumerate()”进行正确匹配?@Sanich:Yes。从文档中:“[zip()]返回元组列表,其中第i个元组包含每个参数序列或iterables中的第i个元素。”谢谢!!这就是我一直在寻找的解决方案。只是没有找到这样一个条件的语法谢谢!!这就是我一直在寻找的解决方案。只是没有找到这样一个条件的语法
>>> 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