过滤字典+元组

时间:2015-10-13 08:27:48

标签: python loops for-loop dictionary tuples

所以我加载了一个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')]}

你可以看到有一个叫做“事件”的元组。它可以包含一个或多个事件。 我想显示所有这些包含名为' 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']

3 个答案:

答案 0 :(得分:1)

您正在检查'关闭'是否在元组列表中,但不在元组本身中,因此它永远不会匹配。您已经使用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']

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

不需要两个for循环:

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

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