首页 > 解决方案 > 在 Python 3 中加入列表,如 SQL JOIN

问题描述

我有 2 个对象(将它们想象为数据库表):

O1:
字段1(id)
字段
2字段3

O2:
field1
field2
field3(id)
field4

我有 2 个列表:
L1 是 O1 对象
列表 L2 是 O2 对象列表

问题:有没有办法像 SQL JOIN 一样通过 L1.field1 和 L2.field3 加入这两个列表?两个列表的项目计数始终相等(1:1 关系),但它们不一定按这两个字段排序。

标签: pythonpython-3.xlistjoin

解决方案


你可以用简单而天真的方式做到这一点:

joined = [ i + j for i in L1 for j in L2 if i[0] == j[2] ]

对于小型列表,它肯定会比 pandas 更有效,但对于大型列表来说表现不佳。

一种中间方法是使用辅助字典:

D2 = { j[2]: j for j in L2 }
joined = [ i + D2[i[0]] for i in L1 ]

它现在将在 O(len(L1)) + O(len(L2)) 而不是 O(len(L1)) * O(len(L2)) 上执行。对于非常大的数据集,效率仍然低于高度优化的 pandas 模块,但对于不太小的列表来说,比简单的方法要好得多。


推荐阅读