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

时间:2018-03-03 21:34:04

标签: python list dictionary

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

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]

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

3 个答案:

答案 0 :(得分: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'}

答案 1 :(得分:0)

我相信你的清单已经代表了你想要的东西,只是有些倒置。您说要js.ExecuteScript(jsfile + "$('#[sourceElement]').simulateDragDrop({dropTarget: '#[targetElement]'})");获取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

答案 2 :(得分:0)

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

for y, rows in enumerate(data):
    for x, col in enumerate(rows):
        d[(x,y)] = col