在字典中创建列表列表

时间:2018-11-07 21:38:06

标签: python list dictionary for-loop

我正在尝试找到将列表列表转换成字典的代码。可以说我有一个列表

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循环来完成?

4 个答案:

答案 0 :(得分:3)

使用枚举的简单dict-comprehension:

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

答案 1 :(得分: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

答案 2 :(得分:2)

如果您对第三方图书馆熊猫没事

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)}

答案 3 :(得分:1)

以下应该可以解决问题:

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