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