【问题标题】:Python - How to filter list of dics based on another list of dicsPython - 如何根据另一个字典列表过滤字典列表
【发布时间】:2018-04-30 11:04:35
【问题描述】:

你能给我建议吗,如何在 Python 中加快速度

我当前的问题 - 代码有效 - 但会占用所有内存 - 因为我包含 2 个 for 循环(

所以 - 我有 2 个字典列表,需要根据以下逻辑对其进行过滤。

  count = 0
  size = 0
  latest = dateutil.parser.parse('1900-01-01T00:00:00.000')

  for obj_seg in objects_segments[1]:
    exclude = False
    for obj in objects[1]:
      if obj['name'] in obj_seg['name']:
        exclude = True
        break

    if not exclude:
      d = dateutil.parser.parse(obj_seg['last_modified'])
      if d > latest:
        latest = d
      size+=obj_seg['bytes']
      count+=1

“objects_segments[1]”最多可以包含 30M 个元素,“objects[1]”-最多 100K...

在没有这种丑陋的情况下使用此类数据的更好方法包括 for_loop (

UPD1:更改布尔逻辑并将中断添加到第二个循环。 Tnx @nthall

【问题讨论】:

    标签: python python-2.7 filtering


    【解决方案1】:

    嗯,一个简单的改进是在设置 exclude = False 后停止内部循环——现在你将不必要地继续循环。

    for obj in objects[1]:
      if obj['name'] not in obj_seg['name']:
        exclude = False
        break
    

    【讨论】:

    • Tnx 很多! ) 完全忘记这一点
    • 顺便说一句-不是。要使用 break,我们应该将循环内的 exclude = False 逻辑更改为 exclude = True - 在这种情况下 - 是的 - 我们可以打破循环
    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2015-05-17
    • 2019-12-27
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多