【问题标题】:Filtering a dictionary + Tuple过滤字典+元组
【发布时间】:2016-01-10 21:52:04
【问题描述】:

所以我已经加载了一个泡菜文件并在这里​​找到了这些字典:

 {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”的元组可以包含一个或多个事件。 我想显示所有这些包含名为“已关闭”的事件的字典。

我试过这种方法,但它不起作用

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

【问题讨论】:

  • 那么您需要详细说明 不起作用 ,您会得到什么? ticketdata 也是字典吗?
  • 我什么都没有,只有空白。是的,它是一本字典
  • 您当前的示例似乎有 3 个不同的字典?还是一个包含三个键的字典?
  • 你的泡菜可能有关键错误,是真的吗。
  • print(ticketdata) 你能准确地显示打印的内容吗?

标签: python loops for-loop dictionary tuples


【解决方案1】:

不需要两个for 循环:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多