Python列表转换成字典

2024-04-18 20:14:00 发布

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

我正试图把一个列表转换成字典,但遇到了麻烦。有人给点小费吗?你知道吗

这是我的意见:

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

有了这个,我想创建一个字典,其中我的键将仅是第一个列表中的元素,这些元素是列1、列2…列5。你知道吗

我们还知道,对于每个键,精确的值是列表其余部分的元素:

列1-->;值1列1,值2列1。。。你知道吗

列2-->;值1列2,值2列2。。。你知道吗

预期结果:

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

我一直在尝试使用zip、枚举(可能被错误地使用),但总是得到意外的输出。谢谢!你知道吗


Tags: gt元素列表字典意见column1column2正试图
3条回答
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']}]

使用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']}

这是一个冗长但直截了当的版本:

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)

相关问题 更多 >