2015-09-07 3 views
1

Я хотел бы хранить много экземпляров некоторых данных в python. Каждая запись имеет следующие поля: имя пользователя, адрес, зарплата и т. Д.Структура данных Python для имитации реляционных баз данных

Имя пользователя должно быть уникальным. Я много ищу.

В настоящее время я использую список словарей, но когда я вставляю новый элемент, я перебираю список и проверяю имя пользователя для каждого словаря, который является O (n). Поиск - O (n). Как я могу достичь того, что есть индекс по именам пользователей и сделать время поиска O (logn)?

+0

Как правило, способ добраться до 'O (журнал N)' это с двоичным поиском, который предлагает упорядочение списка в алфавитном порядке по имени пользователя. Если имена пользователей уникальны, почему бы просто не использовать внешний словарь? – jonrsharpe

+1

Почему бы не использовать словарь с именами пользователей в качестве ключей? – michaelrccurtis

+2

Зачем имитировать реляционную базу данных, когда вы можете использовать реляционную базу данных (например, [sqlite] (https://docs.python.org/2/library/sqlite3.html)). – bereal

ответ

2

Почему бы не использовать словарь dicts?

Словарь верхнего уровня может быть адресован именем пользователя, а другие dicts могут быть такими же, как у вас сейчас.

Словарь также можно отсканировать (d.values ​​()) - единственным недостатком является то, что вы не можете зависеть от заказа.

Конечно, это не поведение БД, но в большинстве случаев достаточно хорошее и очень быстрое - доступ через dict - это O (1).

Конечно, вы можете использовать sqlite - но когда вы просто хотите получить доступ через имя пользователя и отсканировать записи, вы намного быстрее (как в скорости разработки, так и во время выполнения).

0

В качестве альтернативы вы можете использовать реляционную базу данных. Модуль sqlite позволяет для баз данных в памяти:

import sqlite3 
conn = sqlite3.connect(':memory:') 
# ... 
conn.close() 
Смежные вопросы