Python列表列表转换为字典

时间:2016-08-26 09:23:48

标签: python dictionary type-conversion

我正在尝试将列表列表转换为字典,但我遇到了麻烦。有人会提供一些提示吗?

这是我的意见:

[['Column1', 'Column2', 'Column3', 'Column4', 'Column5'],     
['Value1Column1', 'Value1Column2', 'Value1Column3', 'Value1Column4',   
'Value1Column5'], ['Value2Column1', 'Value2Column2', 'Value2Column3', 
'Value2Column4', 'Value2Column5'], ..., 
['ValueXColumn1','ValueXColumn2', 'ValueXColumn3', 'ValueXColumn4', 'ValueXColumn5']]

有了这个我想创建一个字典,其中我的键是元素来自第一个列表 Column1,Column2 ... Column5

众所周知,对于每个键,精确值是其余列表中的元素:

Column1 - > Value1Column1,Value2Column1 ...

Column2 - > Value1Column2,Value2Column2 ......

预期结果:

"Column1": ["Value1Column1", "Value2Column1"...]

我一直在尝试使用zip,enumurate(可能使用错误)并且总是意外输出。谢谢!

3 个答案:

答案 0 :(得分:4)

使用dict comprehensionzip function非常简单。

seq_of_seq = [['Column1', 'Column2', 'Column3', 'Column4', 'Column5'],
              ['Value1Column1', 'Value1Column2', 'Value1Column3', 'Value1Column4', 'Value1Column5'],
              ['Value2Column1', 'Value2Column2', 'Value2Column3', 'Value2Column4', 'Value2Column5'],
              ['ValueXColumn1', 'ValueXColumn2', 'ValueXColumn3', 'ValueXColumn4', 'ValueXColumn5']]

d = {s[0]: s[1:] for s in zip(*seq_of_seq)}

这会产生值为元组:

{'Column1': ('Value1Column1', 'Value2Column1', 'ValueXColumn1'),
 'Column2': ('Value1Column2', 'Value2Column2', 'ValueXColumn2'),
 'Column3': ('Value1Column3', 'Value2Column3', 'ValueXColumn3'),
 'Column4': ('Value1Column4', 'Value2Column4', 'ValueXColumn4'),
 'Column5': ('Value1Column5', 'Value2Column5', 'ValueXColumn5')}

如果您确实需要使用列表:

d = {s[0]: list(s[1:]) for s in zip(*seq_of_seq)}

结果:

{'Column1': ['Value1Column1', 'Value2Column1', 'ValueXColumn1'],
 'Column2': ['Value1Column2', 'Value2Column2', 'ValueXColumn2'],
 'Column3': ['Value1Column3', 'Value2Column3', 'ValueXColumn3'],
 'Column4': ['Value1Column4', 'Value2Column4', 'ValueXColumn4'],
 'Column5': ['Value1Column5', 'Value2Column5', 'ValueXColumn5']}

答案 1 :(得分:1)

这是冗长但直接的版本:

from collections import defaultdict

keys = lst[0]
rows = lst[1:]
result = defaultdict(list)

for row in rows:
    for key, value in zip(keys, row):
        result[key].append(value)

答案 2 :(得分:0)

a = [['Column1', 'Column2', 'Column3', 'Column4', 'Column5'], ['Value1Column1', 'Value1Column2', 'Value1Column3', 'Value1Column4', 'Value1Column5'], ['Value2Column1', 'Value2Column2', 'Value2Column3', 'Value2Column4', 'Value2Column5']]

[{a[0][i]: [j[i] for j in a[1:]] for i in range(len(a[0]))}]

给出

[{'Column1': ['Value1Column1', 'Value2Column1'],
  'Column2': ['Value1Column2', 'Value2Column2'],
  'Column3': ['Value1Column3', 'Value2Column3'],
  'Column4': ['Value1Column4', 'Value2Column4'],
  'Column5': ['Value1Column5', 'Value2Column5']}]