Как построить список в виде пар (ключ, значение) с PyMySQL и Python? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть следующий код:

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()

Запрос возвращает данные в виде:

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

cola - это key

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 пар (ключ, значение).Разумно ли управлять им в памяти или лучше записать его в файл и обработать на диске?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вы можете указать cursorclass в функции pymysql.connection, она выдаст вам список словарей, как указано ниже:

Ниже приведен вызов функции:

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'}]
0 голосов
/ 12 ноября 2018

Я не пробовал это, но вы должны быть в состоянии использовать понимание списка:

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

Если вы планируете осуществлять поиск по ключу, лучше использовать словарь:

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

Тогда, если вы хотите найти значение, соответствующее ключу 123:

value = map[123]

Относительно того, имеет ли смысл хранить 900 000 пар, зависит от ваших аппаратных ресурсов - возможно, есть более эффективные способы использования памяти, но вам может потребоваться установить некоторые дополнительные зависимости.

...