我有一个名为TempDict
的庞大词典,其中包含其他几个词典。它看起来像这样:
2556 {'origin': u'HW', 'department': u'Intern', 'ticket-closed': False, 'prio-events': [(datetime.datetime(2015, 7, 27, 16, 30, 59, 547747, tzinfo=<LocalTimezone "CEST" 2:00:00>), u'Wichtig')], 'status-events': [(datetime.datetime(2015, 7, 27, 16, 30, 59, 547747, tzinfo=<LocalTimezone "CEST" 2:00:00>), u'new')]}
2557 {'origin': u'HW', 'department': u'Intern', 'ticket-closed': False, 'prio-events': [(datetime.datetime(2015, 7, 27, 16, 32, 37, 491657, tzinfo=<LocalTimezone "CEST" 2:00:00>), u'Wichtig')], 'status-events': [(datetime.datetime(2015, 7, 27, 16, 32, 37, 491657, tzinfo=<LocalTimezone "CEST" 2:00:00>), u'new')]}
2558 {'origin': u'HW', 'department': u'Intern', 'ticket-closed': False, 'prio-events': [(datetime.datetime(2015, 7, 27, 16, 33, 51, 29451, tzinfo=<LocalTimezone "CEST" 2:00:00>), u'Wichtig')], 'status-events': [(datetime.datetime(2015, 7, 27, 16, 33, 51, 29451, tzinfo=<LocalTimezone "CEST" 2:00:00>), u'new')]}
2559 {'origin': u'HW', 'department': u'Intern', 'ticket-closed': False, 'prio-events': [(datetime.datetime(2015, 7, 27, 16, 37, 39, 205416, tzinfo=<LocalTimezone "CEST" 2:00:00>), u'Wichtig')], 'status-events': [(datetime.datetime(2015, 7, 27, 16, 37, 39, 205416, tzinfo=<LocalTimezone "CEST" 2:00:00>), u'new')]}
正如您所看到的,有一个名为status-events
的元组,它由一个日期时间对象和一个像&#39; new&#39;
(datetime.datetime(2015, 7, 27, 16, 37, 39, 205416, tzinfo=<LocalTimezone "CEST" 2:00:00>), u'new')
现在我要保存所有元素,其中第一个状态条目(它可以有多于一个的条目)来自2015年,在一个名为TicketDict1
的新词典中
我已经尝试过这种方式,但TempDict1
只是空着。
for i in self.TempDict:
for j,k in self.TempDict[i]['status-events']:
if j.isocalendar()[0] == '2015':
self.ticketDict1[i] = self.TempDict[i]
break
答案 0 :(得分:3)
您可以尝试使用词典理解:
TicketDict1 = {key: value for key, value in TempDict.items() if
value["status-events"][0][0].year == 2015}
您可以使用.items()
获取字典(key, value)
对的列表,然后检查第一个条目value["status-events"][0][0]
是否来自您要查找的.year
。
答案 1 :(得分:0)
并非所有字典的条目都是列表,因此当我尝试它时,Delgan解决方案引发了一个TypeError异常(也许我误解了一些东西)。
读取数据,我假设TempDict是一个字典列表,如果是这样,以下是使用列表理解的单行解决方案
TicketDict1 = [value for value in TempDict if isinstance(value["status-events"], list) and value["status-events"][0][0].year == 2015]
但是,我不喜欢重复代码(value["status-events"]
写两次),所以我更喜欢以下更长的解决方案
TicketDict1 = []
for value in TempDict:
entry = value["status-events"]
if isinstance(entry, list) and entry[0][0].year == 2015:
TicketDict1.append(value)