Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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 使用{row:[col,value]}格式的矩阵行中的键创建dict_Python_Dictionary_List Comprehension - Fatal编程技术网

Python 使用{row:[col,value]}格式的矩阵行中的键创建dict

Python 使用{row:[col,value]}格式的矩阵行中的键创建dict,python,dictionary,list-comprehension,Python,Dictionary,List Comprehension,给定一个列表列表,矩阵(第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',

给定一个列表列表,
矩阵
(第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理解语法是什么,为什么使用花括号的等价语法不起作用?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']}

你的代码没有问题。Dict键是唯一的,字典中不可能有重复的键,因为引用是Dict理解中的同一个键。数据将被替换,正如您在实际输出中看到的那样。您可以这样使用代码

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'}}
{0: [[0, '00'], [1, '01'], [2, '02']],
 1: [[0, '10'], [1, '11'], [2, '12']],
 2: [[0, '20'], [1, '21'], [2, '22']]}

输出:

{0: {0: '00', 1: '01', 2: '02'},
 1: {0: '10', 1: '11', 2: '12'},
 2: {0: '20', 1: '21', 2: '22'}}
{0: [[0, '00'], [1, '01'], [2, '02']],
 1: [[0, '10'], [1, '11'], [2, '12']],
 2: [[0, '20'], [1, '21'], [2, '22']]}

为什么要在第一个示例中使用
enumerate
?请提供
dict
caseTry
a_list=[{j:[k,value]}的输入和所需输出的示例,]
看看,正如@AzatIbrakov所说,请提供示例输入和输出。字典中的所有键都必须是唯一的。在您的情况下,将有具有相同键的
k
元素(因为每行
j
将具有
k
列),因此除具有该键的最后一个元素外,所有元素都将被删除。一个建议是做一个键:
(j,k)
这是正确的。然而,我希望通过行值快速查找,因此元组键将不会有用;有没有一种方法可以让元素集合的行值少于嵌套的dict?你不能只为该键添加整行吗?