2011-07-10 11 views
5

Digamos que tengo un diccionario grande, 100 s de megabytes, que quiero convertir en un estante para discos. Estoy usando pypar para utilizar MPI para generar bits limpios de una lista maestra. ¿Cuál es la mejor manera de lograr esto? Ejemplo:Cómo rellenar el estante con el diccionario existente

# much earlier 
masterDict = shelve.open('aShelveFile') 
# .. . . . . 
# then we work out which parts of masterDict to keep 
# and we put into aCleanDict 
# then use mpi pypar to send the cleaned bits to the master rank 
if pypar.rank() == 0: 
    tempdict = {} 
    for p in range(1,pypar.size()): 
    tempdict.append(pypar.receive(p)) 
    for l1 in tempdict: 
    for l2 in l1: 
     realDict.append(l2) 
    for p in range(1,pypar.size()): 
    pypar.send(realDict,p) 

    # now realDict has all the cleaned bits 
    # which we send to the other hosts 
else: 
    pypar.send(aCleanDict, 0) 
    aCleanDict = pypar.receive(0) 

# now to replace masterDict with aCleanDict 
# note: cannot send shelve dictonaries using pypar 

# insert stackover flow code here. 
+2

¿Hay algún problema con simplemente colocarlo en una estantería? – juanchopanza

+0

¿Cómo archivar un diccionario existente? – Martlark

+0

Agregué un ejemplo simple. Sin embargo, no estoy seguro de si esto es lo que necesita. Si no, puede aclarar la pregunta un poco. – juanchopanza

Respuesta

6

Aquí balda un diccionario simple y hacen que sea accesible a través de la tecla myDict:

import shelve 
myDict = {"a" : 1, "b" : 2} 
myShelvedDict = shelve.open("my_shelved_dictionary.db") 
myShelvedDict["myDict"] = myDict 

Tenga en cuenta que el contenido del diccionario debe ser pickleable, como para cualquier cosa que se va a ser dejado de lado.

Si desea replicar la estructura del diccionario en la estantería, es decir, no tener una clave myDict pero las claves del diccionario directamente como claves de la plataforma, se puede utilizar el método update de estantería:

myShelvedDict.update(myDict) 

La interfaz shelve tiene una gran superposición con el dict.

+0

Agregué un código para que quede más claro lo que estoy haciendo. – Martlark

Cuestiones relacionadas