2016-12-01 11 views
1

У меня есть словарь update_fields, который имеет пары ключ/значение, где значение другого словаря:Используйте iteritems в словаре с DateTime как ключевой

{datetime.date(2016, 12, 2): {'t1030': 0, 't1045': 0, 't0645': 0, 't1645': 0, 't0600': 0, 't1415': 0, 't1000': 0, 't1430': 0, 't0700': 0, 't1800': 0, 't1715': 0, 't1630': 0, 't1615': 0, 't1945': 0, 't1730': 0, 't1530': 0, 't1515': 0, 't0830': 0, 't0915': 0, 't1245': 0, 't1300': 0, 't1600': 0, 't1900': 0, 't2000': 0, 't2115': 0, 't0715': 0}, datetime.date(2016, 12, 1): {'t1030': 0, 't1045': 0, 't0645': 0, 't1645': 0, 't0600': 0, 't1415': 0, 't1000': 0, 't1430': 0, 't0700': 0, 't1800': 0, 't1715': 0, 't1630': 0, 't1615': 0, 't1945': 0, 't1730': 0, 't1530': 0, 't1515': 0, 't0830': 0, 't0915': 0, 't1245': 0, 't1300': 0, 't1600': 0, 't1900': 0, 't2000': 0, 't2115': 0, 't0715': 0}} 

Я хочу, чтобы создать другой словарь из каждого значения ключа (или каким-то образом извлечь его как есть), но когда я пытаюсь это:

for update_date in update_fields: 
    timeslot_fields = {timeslot: value for (timeslot, value) in update_date.iteritems()} 

Я получаю AttributeError: 'datetime.date' object has no attribute 'iteritems'

И когда я пытаюсь это так:

for update_date, values in update_fields: 
    timeslot_fields = {timeslot: value for (timeslot, value) in values.iteritems()} 

Я получаю TypeError: 'datetime.date' object is not iterable

Что я могу делать неправильно? Может ли это иметь какое-то отношение к тому факту, что внешний словарь-словарь - это дата-время? Независимо от того, что я пытаюсь, я не могу вырваться из ключа и получить доступ к его значению.

+0

'update_date' является ключом к словарю' update_fields'. Значение находится в 'update_fields [update_date]' –

ответ

1

Это потому, что вы пытаетесь перебирать ключ.

for update_date in update_fields: 
    items = update_fields[update_date].items() 
    timeslot_fields = {timeslot: value for (timeslot, value) in items} 
+0

Спасибо, это определенно было. –

1

Когда вы выполняете итерацию по словарю в Python, по умолчанию вы перебираете ключи. Если вы хотите перебрать значения, попробуйте update_fields.values() или, возможно, update_fields.itervalues()

for update_date in update_fields.itervalues(): 
    timeslot_fields = {timeslot: value for (timeslot, value) in update_date.iteritems()} 

И если вы хотите перебрать элементы, вы должны использовать update_fields.items() или update_fields.iteritems()

for update_date, values in update_fields.iteritems(): 
    timeslot_fields = {timeslot: value for (timeslot, value) in values.iteritems()} 
+0

Поблагодарите yuo за расширенное объяснение! –

1

Изменения update_date.iteritems() в update_fields[update_date].iteritems(),

for update_date in update_fields: 
    timeslot_fields = {timeslot: value for (timeslot, value) in update_fields[update_date].iteritems()}