过滤字典+元组

Filtering a dictionary + Tuple

所以我加载了一个 pickle 文件并在此处获得了这些词典:

 {1536: {'origin': u'HW', 'department': u'Kunde', 'events': [(1411562482304633L, u'new'), (1421683468875977L, u'closed')]}, 

 {1537: {'origin': u'HW', 'department': u'Kunde', 'events': [(1411562809498852L, u'new'), (1414071035946802L, u'closed')]}, 

 {1538: {'origin': u'HW', 'department': u'Kunde', 'events': [(1411562928759247L, u'new')]}

如您所见,有一个名为 'events' 的元组,它可以包含一个或多个事件。 我想显示所有这些包含名为 'closed'.

的事件的词典

我试过这种方法,但没用

ticketdata = pickle.load(open("tickets.p", "rb"))

for i in ticketdata:
    for j in ticketdata[i]['events']:
        if 'closed' in ticketdata[i]['events']:
            print i, ticketdata[i]['events']

您正在检查 'closed' 是否在元组列表中,但不在元组本身中,因此它永远不会匹配。您已经使用 j 遍历元组列表,因此只需检查 closed 是否在 j 中。

ticketdata = pickle.load(open("tickets.p", "rb"))

for i in ticketdata:
    for j in ticketdata[i]['events']:
        if 'closed' in j:
            print i, ticketdata[i]['events']

以pythonic的方式,你可以这样做: 将所有 dic 放入名为 lst_dic 的列表中,并且:

dic_closed = [dic for dic in lst_dic for evt in dic.get('events',[]) if 'closeed' in evt]

不需要两个for循环:

ticketdata = pickle.load(open("tickets.p", "rb"))

for (i,j) in ticketdata.iteritems():
    if 'closed' in j['events']:
       print i,j['events']