【问题标题】:create dict with keys from matrix rows in form {row:[col, value]}使用 {row:[col, value]} 形式的矩阵行中的键创建字典
【发布时间】: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
  • 请提供dict case 的输入和期望输出示例
  • 试试a_list = [ {j:[k,value]} for (j,row) in ...]
  • 看看PEP 274 -- Dict Comprehensions,正如@AzatIbrakov 所说,请提供示例输入和输出。
  • 字典中的所有键都必须是唯一的。在您的情况下,将有 k 元素具有相同的键(因为每一行 j 将有 k 列),因此除了最后一个具有该键的元素之外的所有元素都将被删除。一个建议可能是制作密钥:(j,k)

标签: python dictionary list-comprehension


【解决方案1】:

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

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']]}

【讨论】:

  • 这是正确的。但是,我想通过行值快速查找,所以元组键没有用;有没有办法获取具有给定行值的元素集合,而不是嵌套字典?
  • 你不能为那个键添加整行吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多