Вы можете использовать random.choices
, что позволяет указать вес выборки. Затем я бы также сохранил словарь в виде списка, чтобы сохранить порядок относительно весов. Как обновлять весовые коэффициенты для правильных или неправильных ответов, зависит от вас, но вы можете использовать обратное масштабирование, например:
vocab = [
("Haus", "house"),
("Garten", "garden"),
("Freund", "friend"),
("Freundin", "friend")
]
weights = [1] * len(vocab)
while ...:
index, (x, y) = random.choices(enumerate(vocab), weights)
attempt = input("Translate " + x)
if(attempt == y):
weights[index] = 1 / (1/weights[index] + 1)
else:
weights[index] = 1 / max(1/weights[index] - 1, 1)
Было обсуждение списка рассылки некоторое время назад, который соответствует этому вопросу довольно хорошо. Эмпирическое правило состояло в том, чтобы только хранить данные в документе, который, вероятно, изменится по сравнению с, растут. Если данные, более вероятно, вырастут затем, Вы, скорее всего, хотите сохранить отдельные документы.
Таким образом в случае многопользовательской системы один способ реализовать основанные на ACL полномочия мог состоять в том, чтобы создать 'документы разрешения', которые будут отображением user_id к doc_id с соответствующим обозначенным разрешением.
{
_id: "permission_doc_1",
type: "acl",
user: "John",
docid: "John's Account Info",
read: true,
write: true
}
И Ваши представления были бы чем-то вроде
function(doc)
{
emit([doc.user, doc.docid], {"read": doc.read, "write": doc.write});
}
И, учитывая docid и идентификатор пользователя, проверяющий на полномочия, был бы:
http://localhost:5984/db/_view/permissions/all?key=["John", "John's Account Info"]
Очевидно, это потребовало бы, чтобы наличие некоторого посредника между клиентом и диваном удостоверилось, что полномочия были осуществлены.
Многопользовательские системы не требуют реляционных баз данных, хотя RDBMSs являются основной технологией для хранения данных / извлечение для огромного количества (особенно CRUD) приложения.
Если Вы хотите читать на документе/объекте - ориентированный, решения для распределенной базы данных былого, поиска на "Lotus Notes / Domino" (это - сформировавшаяся технология/продукт в этой области, это - хорошее фоновое знание в том, как приложения разработаны в основанной на документе парадигме. Классически, это действительно хорошо в приложениях типа рабочего процесса).
На CouchDB а именно, выезде:
http://wiki.apache.org/couchdb/ (это не должно быть удивлением),
http://seanoc.wordpress.com/2007/10/12/more-on-couchdb/ (обзор описания легкого чтения)
http://twit.tv/floss36 (Интервью подкаста все о CouchDB)
Что говорит @micahwittman. Просто быстрое дополнение: Временные представления никогда не должны использоваться в производственной системе, они для разработки только. Постоянные представления могут сделать все, что временные представления могут сделать и являются величинами быстрее.