如何将嵌套列表转换为字典

问题描述 投票:0回答:4

我应该将嵌套列表转换为字典。如果我有这个清单:

data=[[['1','2','-2'], ['3','-1','4']]

我希望它成为:

d={(0, 0): 1, (0, 1): 3, (1, 0): 2, (1, 1): -1, (2, 0): -2, (2, 1): 4}

棘手的部分是我需要将此列表视为矩阵:

'1','2','-2'
'3','-1','4'
  • 注意:d中的键不是该列表中的值的位置。键应该是该矩阵中值的位置。例如,'3'的键是(0,1),而列表中'3'的位置是[1] [0]。 (0,1)应该是该矩阵中的第o列和第1行(我这样理解)

因此字典中的键应该是它们在该矩阵中的位置。我很困惑,我试过:

for m in range(len(data)):
    for n in range(len(data[m])):
        d[(m,n)]= data[n][m]

我知道这是错误的,因为它会超出范围。我很挣扎。

python list dictionary
4个回答
0
投票

您当前的data语法无效,但是,我相信这是您正在寻找的:

data= [['1','2','-2'], ['3','-1','4']]
new_result = {(a, i):data[i][a] for i in range(len(data)) for a in range(len(data[0]))}

输出:

{(0, 1): '3', (0, 0): '1', (2, 1): '4', (2, 0): '-2', (1, 0): '2', (1, 1): '-1'}

0
投票

这样的事情:

data_field = {(i,j): item  for i, lst in enumerate(data) for j,item in enumerate(lst)}

0
投票

我相信你的列表已经代表了你想要的东西,只是有些倒置。你说你想做matrix[(2,1)]来获得4。相反,真的很难做data[1][2]吗?但由于您认为反转是必不可少的,因此您可以通过这种方式转换列表列表。

>>> data=[['1','2','-2'], ['3','-1','4']]  # I corrected your mismatched parens
>>> matrix={}
>>> for x, a in enumerate(zip(*data)):
        for y, b in enumerate(a):
            matrix[(x,y)] = int(b)
>>> matrix
{(0, 0): 1, (0, 1): 3, (1, 0): 2, (1, 1): -1, (2, 0): -2, (2, 1): 4}
>>> matrix[(2,1)]
4

更可读的方法是编写一个函数来进行反演,而不是重新组织数据:

>>> def matrix(coords):
        y, x = coords
        return int (data[x][y])
>>> matrix((2,1))
4 

0
投票

我个人认为长期的理解看起来不直观,所以:

for y, rows in enumerate(data):
    for x, col in enumerate(rows):
        d[(x,y)] = col
© www.soinside.com 2019 - 2024. All rights reserved.