Skip to main content
 首页 » 编程设计

python之将列表的列表转换为字典

2025年05月04日12kuangbin

我有一个列表列表如下:

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':4, 'c':2, 'd':5}, 
     'b': {'a':4,'e':  6,'f':4}, 
     'c':{ 'a':2,'d':7}, 
     'd':{'a':5, 'c':7, 'e':5,'f':3}, 
     'e':{'b':6, 'd':5,'f':1}, 
     'f' :{'b':4, 'd':3,'e':1} 
 } 

我有以下代码来做到这一点,但它只是给我一个不可散列类型列表的错误:

 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' 

请您参考如下方法:

如果您不关心具有零值的键,这应该可以解决问题:

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

如果你想过滤掉这样的键,你可以这样做:

dict(zip(letters, 
         [dict((k, v) for k, v in zip(letters, L) if v) for L in list1]))