将数据库表加载到Python中的嵌套字典中

时间:2010-05-17 22:14:42

标签: python mysql dictionary nested

我在MySql DB中有一个表,我想将它加载到python中的字典中。 表格列如下:

id,url,tag,tagCount

tagCount是某个网址重复标记的次数。所以在这种情况下我需要一个嵌套字典,换句话说是字典字典,来加载这个表。因为每个网址都有几个标签,其中有不同的tagCounts。我使用的代码是:(整个表大约有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

首先,我想知道这是否正确..如果这是为什么需要这么多时间?有没有更快的解决方案?我正在将这个表加载到内存中以便快速访问以摆脱慢速数据库操作的麻烦,但是由于速度慢这已成为瓶颈本身,它甚至比DB访问慢得多。有人帮忙吗?感谢

3 个答案:

答案 0 :(得分:1)

也许你可以尝试使用普通的dicts和元组键,如

d = dict()

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

无论如何你都试过:

d = defaultdict(dict)

而不是

d = defaultdict(defaultdict)

答案 1 :(得分:1)

在为其分配键值之前,您需要确保字典(以及每个嵌套字典)存在。为此目的使用setdefault很有帮助。你最终得到这样的东西:

d = {}
for url, tag, tagCount in urlTagCount:
    d.setdefault(url, {})[tag] = tagCount

答案 2 :(得分:0)

我可以设法验证代码,并且它运行正常。对于像我这样的业余爱好者,我建议永远不要试图“打印”一个非常大的嵌套字典。代码的最后一行中的“print d”是它缓慢的问题。如果删除它或尝试使用实际密钥访问字典,那么它非常快。