2015-04-13 4 views
1

Я написал сценарий python, который извлекает огромное количество данных из базы данных (100 000 элементов). Сценарий импортирует другой модуль, который извлекает данные, перебирая список из 30 параметров (например, параметр 1 тянет объекты 1-5000, параметр 2 тянет объекты 5001 - 15000, параметр 3 тянет объекты 15001 - 16000 и т. Д.).Будет ли кортеж работать для этого примера

Возвращаемые значения сохраняются в большом списке из 30 словарей, но кажется, что только последний словарь хранится, поскольку список не является неизменным, и он постоянно переписывается каждый раз, когда он итерации. Нужно ли преобразовывать список в кортеж, когда я повторяю 30 параметров? Будет ли кортеж содержать 30 словарей со всеми 100 000 предметов? Я не могу легко протестировать, потому что требуется много времени для получения данных, которые хотели знать, это будет работать. Вот исходный код:

mylist = [{key 1: value 1},{key 2: value 2}...{key 30: value 30}] 
for items in mylist: 
    returnlist = call.another.imported.module(**mylist) 

после цикла завершает пройдя через все пункты в MyList, в этой точке returnlist только содержит словарь результатов базы данных для последнего элемента (он же ключ 30: значение 30), который был принят в, пропущенные предыдущие 29 пунктов. Будет ли это преобразование кортежа работать? Мне нужно все 30 предметов с сохраненными объектами 100K. Могу ли я затем преобразовать кортеж в список? Вот предлагаемый код:

mylist = [{key 1: value 1},{key 2: value 2}...{key 30: value 30}] 
for items in mylist: 
    returnlist = call.another.imported.module(**mylist) 
    returntuple = tuple(returnlist) 
newlist = list[returntuple] 
+0

Try список понимание, '[call.another.imported.module (** элементы) для элементов в MyList]' – thefourtheye

+1

к сожалению, новый для питона .. не понимаю ваш ответ .. может вы разрабатывать? – AP70

ответ

1

Его из-за того, что вы не добавлять ничего к вашему кортежу, но вы назначаете свои списки, вместо этого вы можете сделать:

mylist = [{key 1: value 1},{key 2: value 2}...{key 30: value 30}] 
for items in mylist: 
    returnlist = call.another.imported.module(**mylist) 
    returntuple += tuple(returnlist) 
newlist = list[returntuple] 

Или как лучший способ делать:

#returnlist=[] do it if you didn't initial it before 
mylist = [{key 1: value 1},{key 2: value 2}...{key 30: value 30}] 
for items in mylist: 
    returnlist.append(tuple(call.another.imported.module(**mylist))) 

#do stuff with returnlist 
+0

Отличный, добавив к кортежу, было то, чего не хватало! Бьюсь об заклад, это будет работать, когда я на самом деле могу попробовать базу данных завтра. Спасибо. – AP70

+0

@ AP70 Добро пожаловать! – Kasramvd

+1

Здесь нет необходимости конвертировать из списка в кортеж, или наоборот. Проблема заключалась в том, что вы не добавляли результаты в список или иным образом обрабатывали их, как правильно указал Касра. И FYI вы не можете добавить к кортежу, только список. –

Смежные вопросы