【问题标题】:Creating a list of lists into a dictionary [duplicate]将列表列表创建到字典中[重复]
【发布时间】:2019-04-11 09:35:04
【问题描述】:

我正在尝试找到将列表列表转换为字典的代码。假设我有一个列表是

list_one = [['id1', 'id2', id3', 'id4', 'id5'],
            ['1', 'Cat', '400', 'Fur', '50'],
            ['2', 'Dog', '500', 'Smelly', '60']]

字典应该有键以这种格式对字典中的每个列表进行编号

new_dict = {1.0: {'id1': 1,
                 'id2': 'Cat',
                 'id3': 400,
                 'id4': 'Fur',
                 'id5': 50},
            2.0: {'id1': 2,
                  'id2': 'Dog',
                  'id3': 500,
                  'id4': 'Smelly'
                  'id5': 60}

这种转换可以在列表理解中或通过 for 循环中完成吗?

【问题讨论】:

  • 看起来很简单,所以为什么不尝试自己实现它,而不是花更多的时间在网上寻找现成的代码呢?
  • 在我们的目标字典中,为什么键是1.0 ,2.0 等。为什么是小数?物理意义是什么?
  • 就@Srini 而言,将密钥存储为floats 会无缘无故地产生额外的开销。只需存储为int,它更小(从数据角度来看)并且更容易查找

标签: python list dictionary for-loop


【解决方案1】:

使用枚举的简单字典理解:

list_one = [['id1', 'id2', 'id3', 'id4', 'id5'],
            ['1', 'Cat', '400', 'Fur', '50'],
            ['2', 'Dog', '500', 'Smelly', '60']]

new_dict = {float(i): dict(zip(list_one[0], items)) 
            for i, items in enumerate(list_one[1:], start=1)}

print(new_dict)

结果

{1.0: {'id1': '1', 'id2': 'Cat', 'id3': '400', 'id4': 'Fur', 'id5': '50'}, 
 2.0: {'id1': '2', 'id2': 'Dog', 'id3': '500', 'id4': 'Smelly', 'id5': '60'}}

【讨论】:

    【解决方案2】:

    在您的用例中,键是列表中的第一个列表,对象是其余的。您可以将它们压缩在一起并像这样创建字典:

    ks, objs = list_one[0], list_one[1:]
    
    myobjects = {i: dict(zip(ks, l)) for i,l in enumerate(objs)}
    

    zip 将逐个元素对并创建像 (x, y)dict 这样的元组将从该元组生成 {x: y}。文档可以在here

    找到

    【讨论】:

      【解决方案3】:

      如果你对第三方库 pandas 没问题

      import pandas as pd
      {float(k):v for k,v in enumerate(pd.DataFrame(list_one[1:],columns=list_one[0]).to_dict('records'),1)}
      

      【讨论】:

      • op 对使用 pandas 只字未提
      • @Srini 公平地说:OP 没有说反对使用 pandas....
      • @hiroprotagonist 是的。但是答案的原始版本也没有明确表示正在使用熊猫。我也只是想强调一下:)
      【解决方案4】:

      以下应该可以解决问题:

      >>> new_dict = {float(i): {list_one[0][j]:val for j,val in enumerate(list_one[i])} for i in range(1,len(list_one))}
      >>> new_dict
       {1.0: {'id1': '1', 'id2': 'Cat', 'id3': '400', 'id4': 'Fur', 'id5': '50'},
       2.0: {'id1': '2', 'id2': 'Dog', 'id3': '500', 'id4': 'Smelly', 'id5': '60'}}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-25
        • 2018-09-09
        • 1970-01-01
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        • 2020-01-23
        • 2020-06-24
        相关资源
        最近更新 更多