Просто для полноты: пока набор значений не слишком велик, вы могли бы также просто построить строку с выражением, подобным
... WHERE tab.col = ? OR tab.col = ? OR tab.col = ?
, который вы могли бы затем перейти к prepare (), а затем использовать setXXX () в цикле для установки всех значений. Это выглядит yucky, но многие «большие» коммерческие системы обычно делают такие вещи до тех пор, пока они не достигнут ограничений, специфичных для БД, таких как 32 КБ (я думаю, это так) для операторов в Oracle.
Конечно, вы необходимо убедиться в том, что набор никогда не будет необоснованно большим или будет захват ошибок в том случае, если это будет.
Как это:
>>> keys = ['a', 'b', 'c']
>>> values = [1, 2, 3]
>>> dictionary = dict(zip(keys, values))
>>> print(dictionary)
{'a': 1, 'b': 2, 'c': 3}
Вуаля:-), попарное dict
конструктор и zip
функция удивительно полезны: https://docs.python.org/3/library/functions.html#func-dict
>>> keys = ('name', 'age', 'food')
>>> values = ('Monty', 42, 'spam')
>>> dict(zip(keys, values))
{'food': 'spam', 'age': 42, 'name': 'Monty'}
Попробуйте это:
>>> import itertools
>>> keys = ('name', 'age', 'food')
>>> values = ('Monty', 42, 'spam')
>>> adict = dict(itertools.izip(keys,values))
>>> adict
{'food': 'spam', 'age': 42, 'name': 'Monty'}
В Python 2, это также более экономично в потреблении памяти по сравнению с zip
.
Если необходимо преобразовать ключи или значения прежде, чем создать словарь тогда , выражение генератора могло использоваться. Пример:
>>> adict = dict((str(k), v) for k, v in zip(['a', 1, 'b'], [2, 'c', 3]))