将数据库表加载到Python中的嵌套字典中
我在MySql数据库里有一个表格,我想把它加载到Python的字典里。这个表格的列如下:
id,url,tag,tagCount
tagCount是指某个网址的标签出现的次数。所以我需要一个嵌套字典,简单来说就是一个字典里面再放一个字典,来加载这个表格。因为每个网址都有多个标签,而这些标签的tagCount是不同的。我用的代码是这样的:(整个表格大约有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
你需要确保字典(还有里面的每个嵌套字典)在你给它们赋值之前是存在的。为了这个目的,使用setdefault这个方法会很有帮助。这样你最终会得到类似下面的代码:
d = {}
for url, tag, tagCount in urlTagCount:
d.setdefault(url, {})[tag] = tagCount
1
也许你可以试试用普通的字典和元组作为键,比如:
d = dict()
for url,tag,tagCount in urlTagCount:
d[(url, tag)] = tagCount
无论如何,你试过这个吗:
d = defaultdict(dict)
而不是这个:
d = defaultdict(defaultdict)
0
我成功地验证了代码,它运行得非常好。对于像我这样的初学者,我建议不要尝试“打印”一个非常大的嵌套字典。代码最后一行的“print d”就是导致它运行慢的原因。如果把它去掉,或者用实际的键去访问字典,那就会快很多。