【问题标题】:Python data structure to mimic relational databases模仿关系数据库的Python数据结构
【发布时间】:2015-12-03 03:02:33
【问题描述】:

我想在 python 中存储一些数据的大量实例。每条记录都有以下字段: 用户名、地址、工资等...

用户名应该是唯一的。我做了很多搜索。

目前我正在使用一个字典列表,但是当我插入一个新项目时,我会迭代列表并检查每个字典的用户名,即 O(n)。搜索也是 O(n)。如何实现用户名索引,并使搜索时间为 O(logn)?

【问题讨论】:

  • 通常,到达O(log n) 的方法是使用二进制搜索,这建议您按用户名的字母顺序排列您的列表。如果用户名是唯一的,为什么不直接使用外部字典呢?
  • 为什么不使用以用户名作为键的字典?
  • 既然可以使用关系数据库(如sqlite),为什么还要模仿关系数据库。
  • 以用户名作为键的字典为您提供 O(1) 查找时间。
  • 我猜你必须提供你想要使用的数据样本。我无法想象您将如何获得具有唯一用户名的数据库。似乎不正确,可能这是一个坏主意。如果这是一个非常小的项目,那么您已经准备好一两个答案了。

标签: python list search dictionary set


【解决方案1】:

为什么不使用字典?

顶级字典可以由用户名寻址,其他字典可以和你现在的一样。

字典也可以被扫描扔掉(d.values())——唯一的缺点是你不能依赖排序。

当然这不是数据库行为,但在大多数情况下已经足够好并且非常快——通过 dict 访问是 O(1)。

当然您可以使用 sqlite -- 但是当您只想通过用户名访问并扫描条目时,您会快得多(无论是开发速度还是运行速度)。

【讨论】:

    【解决方案2】:

    您也可以实际使用关系数据库。 sqlite 模块允许内存中的数据库:

    import sqlite3
    conn = sqlite3.connect(':memory:')
    # ...
    conn.close()
    

    【讨论】:

      猜你喜欢
      • 2012-07-10
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多