给定一个列表列表,matrix
(第j行和第k列,元素值)我可以使用list-comprehension制作一个扁平的值列表:
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]}条目的词典,那么等效的词典理解语法是什么,以及为什么不使用花括号等效作品呢? e.g:
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']}
答案 0 :(得分:1)
您的代码没有任何问题。 Dict键是唯一的,并且在Dictionaries中不能使用重复键,因为引用是dict理解中的相同键,数据将被替换,就像您在实际输出中看到的那样。您可以以这种方式使用代码< / p>
matrix = [['00','01','02'],['10','11','12'],['20','21','22']]
a_list = {j:row for (j,row) in enumerate(matrix)}
for key,value in a_list.items():
new_list = {}
for i,j in enumerate(value):
new_list[i]=j
a_list[key] = new_list
a_list
输出:
{0: {0: '00', 1: '01', 2: '02'},
1: {0: '10', 1: '11', 2: '12'},
2: {0: '20', 1: '21', 2: '22'}}
或
matrix = [['00','01','02'],['10','11','12'],['20','21','22']]
a_list = {j:row for (j,row) in enumerate(matrix)}
for key,value in a_list.items():
new_list = []
for i,j in enumerate(value):
new_list.append([i,j])
a_list[key] = new_list
a_list
输出:
{0: [[0, '00'], [1, '01'], [2, '02']],
1: [[0, '10'], [1, '11'], [2, '12']],
2: [[0, '20'], [1, '21'], [2, '22']]}