2015-10-13 75 views
0

所以我在這裏已經加載泡菜文件中得到了這些詞典:過濾字典+元組

{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'] 
+0

那麼你需要詳細說明*不起作用*,你會得到什麼?也是'ticketdata'字典? –

+0

我沒有得到任何東西,只是空白。是它的字典 –

+0

你目前的例子好像你有3個不同的字典?或者它是帶有三個鍵的單個詞典? –

回答

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'] 
0

在Python的方式,你可以這樣做: 把所有的DIC在名爲lst_dic列表:

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

有沒有需要兩個for循環:

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

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