【发布时间】:2017-07-24 04:28:45
【问题描述】:
给定一个列表列表,matrix(第 j 行和第 k 列,元素值)我可以使用列表理解制作一个扁平的值列表:
matrix = [['00','01','02'],['10','11','12'],['20','21','22']]
list_1 = [value for (j,row) in enumerate(matrix) for (k,value) in enumerate(row)]
print(list_1)
#output: ['00', '01', '02', '10', '11', '12', '20', '21', '22']
模仿嵌套的for循环语法:
list_2 = []
for (j,row) in enumerate(matrix):
for (k,value) in enumerate(row):
list_2.append(value)
如果我想要一个 {j:[k,value]} 形式的条目的字典,等效的 dict 理解语法是什么,为什么不使用花括号等效的工作?例如:
list_3 = {j:[k,value] for (j,row) in enumerate(matrix) for (k,value) in enumerate(row)}
#expected output: {0:[0,'00'], 0:[1,'01'], 0:[2,'02']...}
#actual output: {0: [2, '02'], 1: [2, '12'], 2: [2, '22']}
【问题讨论】:
-
为什么在第一个例子中使用
enumerate? -
请提供
dictcase 的输入和期望输出示例 -
试试
a_list = [ {j:[k,value]} for (j,row) in ...] -
看看PEP 274 -- Dict Comprehensions,正如@AzatIbrakov 所说,请提供示例输入和输出。
-
字典中的所有键都必须是唯一的。在您的情况下,将有
k元素具有相同的键(因为每一行j将有k列),因此除了最后一个具有该键的元素之外的所有元素都将被删除。一个建议可能是制作密钥:(j,k)
标签: python dictionary list-comprehension