过滤字典+元组
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']
所以我加载了一个 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']