У меня есть таблица в MySql DB, которую я хочу загрузить в словарь на python. столбцы таблицы выглядят следующим образом:
id,url,tag,tagCount
tagCount - это количество повторений тега для определенного URL-адреса. Поэтому в этом случае для загрузки этой таблицы мне нужен вложенный словарь, иными словами, словарь словаря. Поскольку каждый url имеет несколько тегов, для которых существуют разные tagCounts.the, я использовал это:( вся таблица составляет около 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
Прежде всего, я хочу знать, правильно ли это. И почему это так много времени? Есть ли более быстрые решения? Я загружаю эту таблицу в память, чтобы иметь быстрый доступ, чтобы избавиться от хлопот медленных операций с базой данных, но с этой медленной скоростью она стала узким местом, она даже намного медленнее, чем доступ к БД. и кому помочь? спасибо
Мне удалось проверить код, и он работает отлично. Для тех любителей, как я, я предлагаю никогда не пытаться "печатать" очень большой вложенный словарь. что "печать d" в последней строке кода была проблемой, поскольку она была медленной. Если удалить его или попытаться получить доступ к словарю с помощью реальных клавиш, то это очень быстро.
возможно, вы могли бы попробовать с обычными ключами dicts и tuple, такими как
d = dict()
for url,tag,tagCount in urlTagCount:
d[(url, tag)] = tagCount
В любом случае вы попытались:
d = defaultdict(dict)
вместо
d = defaultdict(defaultdict)
Вам нужно убедиться, что словарь (и каждый из вложенных словарей) существует до того, как вы присвоите ему ключ, значение. Для этой цели полезно использовать setdefault. Вы получите что-то вроде этого:
d = {}
for url, tag, tagCount in urlTagCount:
d.setdefault(url, {})[tag] = tagCount