Как заполнить полку существующим словарем - PullRequest
6 голосов
/ 10 июля 2011

Допустим, у меня есть большой словарь на 100 мегабайт, который я хочу превратить в полку на диске. Я использую Pypar, чтобы использовать MPI для генерации очищенных битов из основного списка. Какой лучший способ достичь этого? Пример:

# 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.

1 Ответ

6 голосов
/ 10 июля 2011

Здесь вы кладете простой словарь и делаете его доступным с помощью ключа myDict:

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

Обратите внимание, что содержимое словаря должно быть маринованным, как и все, что должно быть на полке.

Если вы хотите скопировать структуру словаря на полке, то есть не иметь ключ myDict, а ключи словаря непосредственно как ключи полки, вы можете использовать метод полки update:

myShelvedDict.update(myDict)

Интерфейс shelve сильно перекрывается с dict.

...