【问题标题】:Python - handle empty list when iterating through dictPython-遍历字典时处理空列表
【发布时间】:2023-01-14 00:15:24
【问题描述】:

我有一个字典列表,需要检索 events 键,这是一个列表。然而,该列表并不总是充满数据,这取决于具体情况。

如何遍历它们而不出现 list index out of range 错误? [-1] 确实有效,但是当 events 为空列表时,我收到该错误。

success = [
    {"event":self.logs_client.get_log_events(
      logGroupName=x["LogGroupName"] + /"output",
      logStreamName=x["Id"],
    )["events"[-1]["message"],
  }
  for x in jobs
]

【问题讨论】:

  • 你能仔细检查你的例子中所有的括号吗?另外,"events" 应该是一个字符串还是一个名为events 的变量?

标签: python


【解决方案1】:

如果你真的想得到全部事件而不仅仅是最后一个事件,你可以这样做:

success = [
    {"event": event["message"]}
    for x in jobs 
    for event in self.logs_client.get_log_events(
        logGroupName=x["LogGroupName"] + "/output",
        logStreamName=x["Id"],
    )["events"]
]

这将通过不为这些作业生成字典来简单地处理空列表。

如果您真的只想要最后一个,但仍然要跳过没有事件的作业,请修改上面的代码以迭代最后一个事件或没有事件的一部分:

success = [
    {"event": last_event["message"]}
    for x in jobs 
    for last_event in self.logs_client.get_log_events(
        logGroupName=x["LogGroupName"] + "/output",
        logStreamName=x["Id"],
    )["events"][-1:]
]

slice 操作的有用区别在于它无论如何都会为您提供一个列表,而不是空列表上的 IndexError

>>> [1, 2, 3][-1:]
[3]
>>> [][-1:]
[]

【讨论】:

  • 问题是我不想跳过空的event,而是将其保留为空列表。
  • 但是,您无法获得不存在的对象的 "message"。那你想要什么那个空列表?你的 success 列表中没有事件的每项工作是什么?
  • 我会更新我的问题。
猜你喜欢
  • 1970-01-01
  • 2016-06-25
  • 2016-06-22
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多