将列表列表转换为词典

2021-04-11 14:40:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份名单如下:

list1 = [  [0,  4,  2,  5,  0,  0],
           [4,  0,  0,  0,  6,  4],
           [2,  0,  0,  7,  0,  0],
           [5,  0,  7,  0,  5,  3],
           [0,  6,  0,  5,  0,  1],
           [0,  4,  0,  3,  1,  0],
        ]

我想用下面的方法把它转换成字典:

^{2}$

我有下面的代码来实现这一点,但它只是给我一个错误,即不可损坏的类型列表:

 list1 = [  [0,  4,  2,  5,  0,  0],
  [4,  0,  0,  0,  6,  4],
  [2,  0,  0,  7,  0,  0],
  [5,  0,  7,  0,  5,  3],
  [0,  6,  0,  5,  0,  1],
  [0,  4,  0,  3,  1,  0],
]

g=['a','b','c','d', 'e','f']
dl = zip(list1, g)
dict(dl)
print dl

错误是:

   File "/Users/zakirtatari/Documents/da.py", line 19, in <module>
      dict(dl)
   TypeError: unhashable type: 'list'
3条回答
网友
1楼 ·

如果您不关心具有零值的键,则可以使用以下方法:

from string import ascii_lowercase as letters
dict(zip(letters, [dict(zip(letters, L)) for L in list1]))

如果要过滤掉这些键,可以执行以下操作:

^{pr2}$
网友
2楼 ·

下面的解决方案有点难看(可以通过使用enumerate和zip对其进行美化),但它似乎可以实现您希望它做的事情:

alphabet = "abcdefghijklmnopqrstuvwxyz"
list1 = [[0,4,2,5,0], [4, 0, 0, 0, 6]]

g = {}
for idx in range(len(list1)):
    g[alphabet[idx]] = {}
    for idx_2 in range(len(list1[idx])):
        if list1[idx][idx_2] != 0:
            g[alphabet[idx]][alphabet[idx_2]] = list1[idx][idx_2]
网友
3楼 ·

我不确定在实践中我是否会用一句话来解释这个问题,但这里还是有一句话,用字典来理解:

{key: {key2: value for key2, value in zip(g, row) if value != 0}
 for key, row in zip(g, list1)}

相关问题