Python 从三个单独的列表创建嵌套字典

Python 从三个单独的列表创建嵌套字典,python,python-2.7,dictionary,dictionary-comprehension,Python,Python 2.7,Dictionary,Dictionary Comprehension,我编写了一些代码,生成了围绕项目的三个独立列表。第一个列表是ID列表,第二个列表是开始日期列表,第三个列表是结束日期列表。我想将这些列表合并到一个嵌套字典中 item[0]fromstart\u date和item[0]fromend\u date与item[0]fromproject\u id[0] project_id = ['project 1','project 2', 'project 3', 'project 4'] start_date = [datetime(2015,1,12

我编写了一些代码,生成了围绕项目的三个独立列表。第一个列表是ID列表,第二个列表是开始日期列表,第三个列表是结束日期列表。我想将这些列表合并到一个嵌套字典中

item[0]
from
start\u date
item[0]
from
end\u date与
item[0]
from
project\u id[0]

project_id = ['project 1','project 2', 'project 3', 'project 4']

start_date = [datetime(2015,1,12), datetime(2015,1,13), datetime(2015,1,11), datetime(2015,1,13)]

end_date = [datetime(2015,1,15), datetime(2015,1,17), datetime(2015,1,15), datetime(2015,1,14)]
期望输出:

d = {
    'project 1' : {'start date' : datetime(2015,1,12), 'end date' :  datetime(2015,1,15},
    'project 2' : {'start date' : datetime(2015,1,13), 'end date' :  datetime(2015,1,17},
    'project 3' : {'start date' : datetime(2015,1,11), 'end date' :  datetime(2015,1,15},
    'project 4' : {'start date' : datetime(2015,1,13), 'end date' :  datetime(2015,1,14},
}
假设所有信息都列在列表中,这将生成所需的输出


假设您的所有信息都列在列表中,这将生成所需的输出。

基本上,我们正在迭代项目列表的索引。使用这些索引,我们创建了一个子词典,用于获取同一索引的其他列表中的元素。然后,我们将该值与项目id键配对

d = {}

for i in range(len(project_id)):
    sub = {'start date': start_date[i], 'end date': end_date[i]}
    d[project_id[i]] = sub

基本上,我们正在迭代项目列表的索引。使用这些索引,我们创建了一个子词典,用于获取同一索引的其他列表中的元素。然后,我们将该值与项目id键配对

d = {}

for i in range(len(project_id)):
    sub = {'start date': start_date[i], 'end date': end_date[i]}
    d[project_id[i]] = sub

使用听写理解和压缩:

d = {a:{"start date":b,"end date":c } for a,b,c  in zip(project_id,start_date,end_date)}

print d

{'project 4': {'end date': datetime.datetime(2015, 1, 14, 0, 0), 'start date': datetime.datetime(2015, 1, 13, 0, 0)}, 'project 2': {'end date': datetime.datetime(2015, 1, 17, 0, 0), 'start date': datetime.datetime(2015, 1, 13, 0, 0)}, 'project 3': {'end date': datetime.datetime(2015, 1, 15, 0, 0), 'start date': datetime.datetime(2015, 1, 11, 0, 0)}, 'project 1': {'end date': datetime.datetime(2015, 1, 15, 0, 0), 'start date': datetime.datetime(2015, 1, 12, 0, 0)}}
如果您想要一个完全有序的dict,请使用:

from collections import OrderedDict
d = OrderedDict()
for a,b,c in zip(project_id,start_date,end_date):
    d.setdefault(a,OrderedDict())
    d[a]["start date"] = b
    d[a]["end date"] = c
print(d)

{'project 1': OrderedDict([('start date', datetime.datetime(2015, 1, 12, 0, 0)), ('end date', datetime.datetime(2015, 1, 15, 0, 0))]),
'project 2': OrderedDict([('start date', datetime.datetime(2015, 1, 13, 0, 0)), ('end date', datetime.datetime(2015, 1, 17, 0, 0))]),
'project 3': OrderedDict([('start date', datetime.datetime(2015, 1, 11, 0, 0)), ('end date', datetime.datetime(2015, 1, 15, 0, 0))]),
'project 4': OrderedDict([('start date', datetime.datetime(2015, 1, 13, 0, 0)), ('end date', datetime.datetime(2015, 1, 14, 0, 0))])}

使用听写理解和压缩:

d = {a:{"start date":b,"end date":c } for a,b,c  in zip(project_id,start_date,end_date)}

print d

{'project 4': {'end date': datetime.datetime(2015, 1, 14, 0, 0), 'start date': datetime.datetime(2015, 1, 13, 0, 0)}, 'project 2': {'end date': datetime.datetime(2015, 1, 17, 0, 0), 'start date': datetime.datetime(2015, 1, 13, 0, 0)}, 'project 3': {'end date': datetime.datetime(2015, 1, 15, 0, 0), 'start date': datetime.datetime(2015, 1, 11, 0, 0)}, 'project 1': {'end date': datetime.datetime(2015, 1, 15, 0, 0), 'start date': datetime.datetime(2015, 1, 12, 0, 0)}}
如果您想要一个完全有序的dict,请使用:

from collections import OrderedDict
d = OrderedDict()
for a,b,c in zip(project_id,start_date,end_date):
    d.setdefault(a,OrderedDict())
    d[a]["start date"] = b
    d[a]["end date"] = c
print(d)

{'project 1': OrderedDict([('start date', datetime.datetime(2015, 1, 12, 0, 0)), ('end date', datetime.datetime(2015, 1, 15, 0, 0))]),
'project 2': OrderedDict([('start date', datetime.datetime(2015, 1, 13, 0, 0)), ('end date', datetime.datetime(2015, 1, 17, 0, 0))]),
'project 3': OrderedDict([('start date', datetime.datetime(2015, 1, 11, 0, 0)), ('end date', datetime.datetime(2015, 1, 15, 0, 0))]),
'project 4': OrderedDict([('start date', datetime.datetime(2015, 1, 13, 0, 0)), ('end date', datetime.datetime(2015, 1, 14, 0, 0))])}
结果

{'project 4': {'end date': '2015, 01, 14', 'start date': '2015, 01, 13'}, 'project 2': {'end date': '2015, 01, 17', 'start date': '2015, 01, 13'}, 'project 3': {'end date': '2015, 01, 15', 'start date': '2015, 01, 11'}, 'project 1': {'end date': '2015, 01, 15', 'start date': '2015, 01, 12'}}
结果

{'project 4': {'end date': '2015, 01, 14', 'start date': '2015, 01, 13'}, 'project 2': {'end date': '2015, 01, 17', 'start date': '2015, 01, 13'}, 'project 3': {'end date': '2015, 01, 15', 'start date': '2015, 01, 11'}, 'project 1': {'end date': '2015, 01, 15', 'start date': '2015, 01, 12'}}