2017-09-20 5 views
1

J'ai un dictionnaire assez volumineux avec environ 40 millions de clés que j'ai stocké naïvement juste en écrivant {key: value, key: value, ...} dans un fichier texte. Je n'ai pas considéré le fait que je ne pourrais jamais accéder de manière réaliste à ces données car python a une aversion pour le chargement et l'évaluation d'un fichier texte de 1,44 Go en tant que dictionnaire.Alternative à un très grand dictionnaire (~ 40 millions de clés)

Je sais que je pourrais utiliser quelque chose comme shelve pour pouvoir accéder aux données sans les lire toutes à la fois, mais je ne suis pas sûr de savoir comment je pourrais même convertir ce fichier texte en fichier shelve sans régénérer toutes les données (que je préférerais ne pas faire). Existe-t-il de meilleures alternatives pour stocker, accéder et potentiellement modifier plus tard autant de données? Si non, comment devrais-je convertir cette monstruosité en un format utilisable par shelve?

S'il importe, le dictionnaire est de la forme {(int, int, int int): [[int, int], Bool]}

+8

Utilisez une base de données? – Alexander

+2

Utilisez sqlite - Python a un bon support dans la bibliothèque standard. –

+1

Pour ajouter au commentaire d'Alexander, ['sqlite3'] (https://docs.python.org/3.6/library/sqlite3.html) est probablement la plus petite barrière à l'entrée ... – mgilson

Répondre

0

Redis est un magasin clé-valeur en mémoire qui peut être utilisé pour ce genre de problèmes.

Il existe plusieurs Python clients. L'opération

hmset vous permet d'insérer plusieurs valeurs-clés.

+0

A pris * hmset * idée de https://stackoverflow.com/questions/32276493/how-to-store-and-retrieve-a-dictionary-with-redis –