【问题标题】:Python list of lists conversion into dictionaryPython列表转换为字典
【发布时间】:2016-08-26 09:23:47
【问题描述】:

我正在尝试将列表列表转换为字典,但遇到了麻烦。有人能给点建议吗?

这是我的输入:

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

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

众所周知,每个键的确切值都是来自其余列表的元素:

Column1 --> Value1Column1, Value2Column1...

Column2 --> Value1Column2, Value2Column2...

预期结果:

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

我一直在尝试使用 zip,枚举(可能被错误地使用)并且总是得到意想不到的输出。谢谢!

【问题讨论】:

    标签: python dictionary type-conversion


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这是冗长但直接的版本:

      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)
      

      【讨论】:

        【解决方案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']}]
        

        【讨论】:

          猜你喜欢
          • 2015-07-23
          • 1970-01-01
          • 2011-11-18
          • 2022-08-16
          • 2015-11-14
          • 2016-10-25
          • 2022-12-04
          • 2019-02-10
          • 1970-01-01
          相关资源
          最近更新 更多