Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Lib de gestion de dictionnaires, à la MongoDB

+4 votes

Je souhaiterais utiliser des dictionnaires pour représenter des données et pouvoir faire des recherches et du tri sur ces dictionnaires. Exactement comme le permettent les bases NoSQL, du genre MongoDB.

Je pourrais donc créer une telle base et me servir de l'interface offerte par PyMongo mais, n'ayant pas particulièrement besoin de stocker mes données de façon persistente, passer par une base NoSQL n'est pas nécessaire.

Je me demandais donc s'il existait une bibliothèque possédant à peu près les mêmes fonctionnalités que PyMongo, mais travaillant directement sur des dictionnaires. Je pensais que pandas le permettrait, mais ce n'est manifestement pas le cas puisqu'il n'y que des listes (Serie) et des matrices (DataFrame).

demandé 25-Mai-2015 par Vayel (1,050 points)
edité 26-Mai-2015 par Vayel

Je ne trouve pas ta question très claire, qu'est-ce qu'est censé faire la bibliothèque que tu cherches? Quel sont les fonctionnalités dont tu as besoin? Quel genre de travail est-elle censée faire sur tes dictionnaires?

Voir le commentaire de jc au message de Nsukami_. ^^

@Vayel j'avoue trouver ta requete assez etrange. Vouloir faire: tri, recherche, sans mongo, sans redis, sans rien?! Peut on savoir pourquoi?

Parce que je n'ai pas particulièrement besoin de stocker les données ailleurs que dans des variables Python.

Mais si ça n'exsite pas ce n'est pas dramatique : un duo MongoDB + PyMongo conviendra très bien. Ca me demandera juste d'installer une base de données.

MongoDb semble pouvoir tourner ds la RAM

Intéressant, merci. ^^

Mais maintenant que Mongo est installé, je vais l'utiliser comme base standard. Le stockage persistent ne pose pas de problèmes, j'ai la place nécessaire, c'était juste l'ajout d'une composante qui m'embêtait (bien que, comme déjà dit, ce n'est pas la mer à boire non plus).

3 Réponses

+3 votes
 
Meilleure réponse

Peut être que dq.py peut répondre a ton besoin.

Mais si tu as besoin de faire des traitement du style selection/tri/aggregation, y'a pas photo, c'est mieux d'utiliser un DB (sql ou nosql), c'est fait pour ;)

répondu 26-Mai-2015 par jc (2,674 points)
sélectionné 26-Mai-2015 par Vayel

Ca semble convenir en effet. ^^

Mais du coup, vous m'avez convaincu de passer par une base.

+1 vote

http://sametmax.com/aller-plus-loin-avec-les-hash-maps-en-python/

Dans l’ordre d’insertion par contre, ce n’est pas possible avec le
dictionnaire. Mais voilà l’astuce : le hash map en Python, ce n’est
pas QUE le type dict.

Pour ce problème, on peut utiliser collections.OrderedDic:

>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d['Jeanne'] = 3
>>> d['Jack'] = 2
>>> d['July'] = 6
>>> for nom, score in d.items():
        print(nom, score)
...
Jeanne 3
Jack 2
July 6
répondu 26-Mai-2015 par ptank (328 points)

Merci. Malheureusement, il n'y a, me semble-t-il, pas de manière de rechercher et trier efficacement. MongoDB permet d'avoir des index uniques, d'utiliser la clause DISTINCT de SQL, de ne sélectionner que certains champs...

+2 votes

On distingue les bases de données, qui font du stockage, et les moteurs d'indexations, qui font ... de l'indexation, des requêtes, toussa.

Tu sembles chercher un moteur d'indexation qui puisse se brancher sur des dictionnaires et, idéalement, qui ai une API à la PyMongo.

À ce niveau, on trouve les trucs stables mais un peu vieux et lourds à installer (Xapian, Lucene ...), les trucs plus jeune et modernes, qui peuvent entre autre faire du WebService (ElasticSearch).
Et je suis aussi tombé sur Woosh, qui est python-based et donc probablement moins galère à mettre en place : http://whoosh.readthedocs.org/en/latest/quickstart.html

Donc tout dépend de la lourdeur de ton architecture de documents. Si c'est facile à requêter avec db.py : utilise db.py
Si tu as besoin de chercher des documents qui sont indexés par tel champ, dont le nom commence par bidule et qui sont lié à tel autre document, alors il te faut un moteur de recherche et non plus juste une DB.

répondu 28-Mai-2015 par nabellaleen (128 points)
...