Загрузка таблицы БД во вложенные словари в Python - PullRequest
0 голосов
/ 18 мая 2010

У меня есть таблица в БД MySql, которую я хочу загрузить в словарь в python. столбцы таблицы выглядят следующим образом:

id,url,tag,tagCount

tagCount - это количество раз, которое тег был повторен для определенного URL. Так что в этом случае мне нужен вложенный словарь, другими словами словарь словаря, чтобы загрузить эту таблицу. Потому что у каждого URL есть несколько тегов, для которых есть разные теги Count. Я использовал следующий код :( вся таблица содержит около 22 000 записей)

cursor.execute( ''' SELECT url,tag,tagCount
                    FROM wtp ''')

urlTagCount = cursor.fetchall()

d = defaultdict(defaultdict)

for url,tag,tagCount in urlTagCount:
    d[url][tag]=tagCount

print d

Прежде всего, я хочу знать, правильно ли это .. и если это так, то почему это занимает так много времени? Есть ли более быстрые решения? Я загружаю эту таблицу в память, чтобы иметь быстрый доступ, чтобы избавиться от хлопот медленных операций с базой данных, но с этой медленной скоростью она стала узким местом, она даже намного медленнее, чем доступ к БД. а кто-нибудь поможет? спасибо

Ответы [ 3 ]

1 голос
/ 18 мая 2010

Необходимо убедиться, что словарь (и каждый из вложенных словарей) существуют, прежде чем присваивать им значение ключа. Для этого полезно использовать setdefault. Вы получите что-то вроде этого:

d = {}
for url, tag, tagCount in urlTagCount:
    d.setdefault(url, {})[tag] = tagCount
1 голос
/ 18 мая 2010

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

d = dict()

for url,tag,tagCount in urlTagCount:
    d[(url, tag)] = tagCount

в любом случае вы пробовали:

d = defaultdict(dict)

вместо

d = defaultdict(defaultdict)
0 голосов
/ 18 мая 2010

Мне удалось проверить код, и он работает отлично. Для таких любителей, как я, никогда не пытайтесь «напечатать» очень большой вложенный словарь. проблема в том, что «print d» в последней строке кода была медленной. Если удалить его или попытаться получить доступ к словарю с помощью реальных ключей, то это очень быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...