2009-12-17 49 views
0

简单的问题,我已经解决了..但python有一百万种方法来解决同样的问题。我不希望是最简洁的解决方案,我只是想要一个更有意义比下面什么是在Python中处理这个问题的更好方法

# sql query happens above, returns multiple rows 
rows = cursor.fetchall() 
cursor.close() 
cntdict = {} 
for row in rows: 
    a, b, c = row[0], row[1], row[2] 
    cntdict = { 
     a : { "b":b, "c":c } 
    } 
print dict(cntdict) 

备忘,始终是唯一的上方。我想从结果集中创建一个字典。稍后在我的脚本中,我需要引用字典中发生的每一行的值。我试图通过使关键字来自var a的值来索引字典。这应该指向另一个带有两个以上键/值对的词典,它们描述了一个......除非有一个更聪明/更短的方法来做到这一点。

回答

12

你可以做同样的事情与发电机的表达和解释构造:

dict((row[0], {"b": row[1], "c": row[2]}) for row in rows) 

这里是在动作的代码:

>>> rows = [[1, 2, 3], [4, 5, 6]] 
>>> dict((row[0], {"b": row[1], "c": row[2]}) for row in rows) 
{1: {'c': 3, 'b': 2}, 4: {'c': 6, 'b': 5}} 

我不记得,如果MySQLdb的返回行作为元组列表,如果是这种情况,那么你可以这样做:

​​
+0

+1该死的,这很好 – 2009-12-17 01:11:01

+0

S /名单理解/发电机表达/ – 2009-12-17 01:13:57

+0

谢谢内德,纠正。 – 2009-12-17 01:17:26

-2

你可能想厕所k到使用ORM来抽象你的数据库。我无法从这么短的代码片断中找出结果,但是看起来好像你的数据可能在ORM中运行良好,无论如何你只是想建立一个代码。

我最喜欢的三个奥姆斯:一个在Django(易于使用,效果最好的是常规数据),SQLAlchemy(如果你的数据库有一个复杂的架构的最佳选择),并Autumn(小而简单,非常适合使用与SQLite)。

0

正如Nadia暗示的,元组扩展在处理查询结果时非常方便。她的字典()表达式在这种情况下非常好的,但对于其他查询时,你需要做的事情的结果不同的只是使用元组扩展的for循环:

for a, b, c in rows: 
    # do something 
相关问题