如何用 PyMySQL 和 Python 构造一个列表作为(键,值)对?

How to construct a list as (key,value) pairs with PyMySQL and Python?

我有以下代码:

connection = pymysql.connect(...)
try:
    with connection.cursor() as cursor:
       sql = "select cola,colb from ...."
       result = cursor.fetchall()
       How to build a list from the result?
finally:
    connection.close()

查询returns数据为:

cola   colb
-----------
123    abc
124    abd
140    ghf

colakey

colbvalue

我知道它应该是这样的:

list = []
for i in range (0, ????): 
     cola_value = result[0][i].get('cola')
     colb_value = result[1][i].get('colb')
     list.append((cola_value, colb_value))

我想知道什么是正确的语法,这是否是正确的方法? 我希望能够按键搜索列表并按键访问值。

我需要 2-3 个列表,每个列表包含大约 900000 个(键,值)对。 在内存中管理它还是将它写入文件并在磁盘上处理更好?

我没试过,但你应该可以使用列表理解:

list = [(r['cola'], r['colb']) for r in result]

如果您打算按键查找,使用字典会更好:

map = {r['cola']: r['colb'] for r in result}

然后如果你想找到与他们键对应的值 123:

value = map[123]

关于保存 900,000 对是否有意义取决于您的硬件资源 - 可能有更节省内存的方法来做到这一点,但您可能需要安装一些额外的依赖项。

您可以在 pymysql.connection 函数中指定 cursorclass,它将为您提供字典列表,如下所示:

函数调用如下:

conn = pymysql.connect(db='foo', cursorclass=pymysql.cursors.DictCursor)
cursor = conn.cursor()
cursor.execute("SELECT * FROM bar")
print cursor.fetchall()

下面是游标的输出:

[{u'col2': 'rty', u'col1': 'qwe'}, {u'col2': 'fgh', u'col1': 'asd'}]