2015-01-22 3 views
0

Я написал код, который генерирует три отдельных списка, которые вращаются вокруг проектов. Первый список - это список идентификаторов, второй список - даты начала списка, а третий список - список дат окончания. Я хотел бы объединить эти списки в один вложенный словарь.Создал вложенный словарь из трех отдельных списков

item[0] из start_date и item[0] из датой_окончания связаны с item[0] из project_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}, 
} 
+2

Итак, где ваш код и в чем проблема? – jonrsharpe

ответ

1
from datetime import datetime 

if __name__=='__main__': 

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 = dict() 

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

print d 
1
d = {} 
for project, start, end in zip(project_id, start_date, end_date): 
    d[project] = {'start date': start, 'end date': end} 

Предполагая, что все ваши информационные линии вверх в списки, это Я создаю желаемый результат.

1

В принципе, мы итерируем по индексам списка проектов. Используя эти индексы, мы создаем суб-словари, захватывающие элементы в других списках одного и того же индекса. Затем мы сопоставляем это значение с ключом 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 
+0

, объясняя, почему это работает и что вы делаете, сделало бы это лучшим ответом – Markasoftware

2

Используйте Dict понимание и почтовый индекс:

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))])} 
-1
from datetime import datetime 

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

print(d) 

результат

{'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'}} 
Смежные вопросы