gpt4 book ai didi

python - Python中的多对多数据结构

转载 作者:太空狗 更新时间:2023-10-29 20:39:11 25 4
gpt4 key购买 nike

我有一个多对多关系的书籍和作者数据集。

大约有 10^6 本书和 10^5 位作者,平均每本书有 10 位作者。

我需要对数据集进行一系列的操作,比如统计每个作者的书籍数量,或者从集合中删除某个作者的所有书籍。

允许快速处理的良好数据结构是什么?

我希望有一些现成的模块可以提供以下方法:

obj.books.add(book1)

# linking
obj.books[n].author = author1
obj.authors[m].author = book1

# deleting
obj.remove(author1) # should automatically remove all links to the books by author1, but not the linked books

我应该澄清一下,我不喜欢为此使用数据库,而是在内存中完成这一切。

谢谢

最佳答案

sqlite3 (或任何其他好的关系数据库,但是 sqlite 随 Python 一起提供,并且对于这样一个相当小的数据集更方便)似乎是您任务的正确方法。如果您不想学习 SQL,SQLAlchemy是关系数据库的流行“包装器”,可以这么说,它允许您在您选择的几个不同抽象级别中的任何一个处理它们。

而且“在内存中完成”完全没有问题(请注意,这愚蠢,因为您将不必要地付出从每个更持久的地方读取所有数据的开销以及程序的每次运行,同时将数据库保存在磁盘文件上会节省您的开销——但是,这是一个不同的问题;-)。只需将您的 sqlite 数据库打开为 ':memory:' 就可以了——一个全新的关系数据库完全存在于内存中(仅在您的进程期间),过程中不涉及磁盘完全。那么,为什么不呢?-)

就我个人而言,我会直接使用 SQL 来完成这项任务——它让我可以很好地控制正在发生的事情,并且可以轻松地让我添加或删除索引以调整性能等。您将使用三个表:a Books表(主键ID,其他字段如Title&c),一张Authors表(主键ID,其他字段如Name&c),一个“many-to” - 许多关系表”,比如 BookAuthors,只有两个字段,BookIDAuthorID,每个作者-书籍连接一条记录。

BookAuthors 表的两个字段是所谓的“外键”,分别指 Books 和 Authors 的 ID 字段,您可以使用 ON DELETE CASCADE 定义它们 以便引用被删除的书籍或作者的记录依次自动删除——这是一个高语义级别的例子,即使是“裸”SQL 也可以让你工作,这是任何其他现有数据结构都无法比拟的匹配。

关于python - Python中的多对多数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com