用Python处理这个问题的更好方法是什么

用Python处理这个问题的更好方法是什么,python,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 = {

简单的问题,我已经解决了。。但是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)

注意,a在上面总是唯一的。我想从结果集创建一个字典。稍后在我的脚本中,我需要为发生的每一行引用字典中的值。我试图通过使键成为var a中的值来索引字典。这应该指向另一个字典,其中包含两个以上的键/值对,用于描述。。。除非有更聪明/更短的方法,否则可以使用生成器表达式和字典构造函数执行相同的操作:

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是否以元组列表的形式返回行,如果是这种情况,则可以执行以下操作:

dict((a, {"b": b, "c": c}) for a, b, c in rows)

您可能希望研究使用ORM来抽象数据库。我不能从这么短的一段代码中确定,但如果您只是想用它构建一个dict,那么您的数据似乎可以与ORM一起很好地工作


我最喜欢的三种ORM:易于使用的ORM,最适合处理规则数据,如果数据库有复杂的模式,最好的选择,小而简单,非常适合用于SQLite。

正如Nadia提到的,元组扩展在处理查询结果时非常方便。在这种情况下,她的dict表达式非常好,但是对于其他需要对结果执行不同操作的查询,只需在for循环中使用元组展开即可:

for a, b, c in rows:
   # do something

列表理解/生成器表达式/