python - 在 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 关系),但它们不一定按这两个字段排序。
解决方案
你可以用简单而天真的方式做到这一点:
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 模块,但对于不太小的列表来说,比简单的方法要好得多。
推荐阅读
- python - Selenium Python 无法提取 [object Text] 它应该是一个元素
- javascript - 将日期转换为 M j, Y?在 Javascript 中
- vue.js - 我想要做的是使用单个打印按钮从多台打印机同时打印表单的不同打印输出
- regex - 带有组名并包含标签的正则表达式 XML
- sql - 基于字符串模式检索父记录的 Oracle SQL 查询
- cryptography - 密码学:关于流密码的问题
- python - 如何为循环的特定部分添加延迟
- javascript - 将组件作为 React setState 值传递时有问题吗?
- python - sqlite3 向表中添加行不添加任何错误
- c# - 如何提高选项卡式页面 xamarin 表单中的加载性能