Как добавить значения в словарь Python и вернуть его в вызове функции - PullRequest
0 голосов
/ 09 января 2019

У меня есть цикл for в вызове функции python, который выполняется несколько раз. Мне нужно вернуть значения в словаре, чтобы сбросить их в БД.

Вот пример кода, как я могу добавить значения в словарь и убедиться, что у меня есть все из них для дальнейшего использования.

def parser_code():
    log = dict()
    for i in range(len):
        log['abc'] = 2*i
        log['xyz'] = 10+i
    return log

Это будет выполнено, по крайней мере, дважды, поэтому я хочу, чтобы словарь был log = {['abc':2, 'xyz':11],['abc':3, 'xyz':12]}

Как я могу добавить к результату каждый раз? Или есть более разумный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Я думаю, вы ищете defaultdict часть std-libs.

from collections import defaultdict
glog = defaultdict(list)
def parser_code(dd):
    for i in range(length):
        dd['abc'].append(2*i)
    return dd

glog = parser_code(glog)

если вы действительно хотите использовать свой результат, вы должны убедиться, что dict не создается новым для каждого вызова вашей функции.

все еще немного неясно, нужен ли вам дикт или нет, он понадобится вам, только если вам нужна возможность поиска по ключу. Если вас устраивает просто составление списка (массива) чисел, тогда используйте список.

glog = list()
def parser_code(lst):
    return lst + [2*i for i in range(length)]
glog = parser_code(glog)
0 голосов
/ 09 января 2019

Я не уверен на 100%, какое поведение вы ожидаете, но я думаю, что этого кода должно быть достаточно:

def parser_code(length):
  log = list()
  for i in range(length):
    this_dict = dict()
    this_dict['abc'] = 2*i
    this_dict['xyz'] = 10+i
    log.append(this_dict)
  return log
0 голосов
/ 09 января 2019

вы можете дать словарь в качестве параметра для вашей функции.

пожалуйста, обратите внимание, что ваш код не работает для меня (оригинальный абзац цикла for - теперь он исправлен) и параметр len). Мне нужно было немного угадать, что вы на самом деле делаете. Не могли бы вы взглянуть на пример кода в вопросе или комментарии здесь?

def parser_code(result, length):
   for i in range(length):
       result['abc'] = 2*i
       result['xyz'] = 10+i
   return result

d = {}
parser_code(d, 3)
print(d)
parser_code(d, 3)
print(d)

даст такой вывод:

python3 ./main.py 
{'abc': 4, 'xyz': 12}
{'abc': 4, 'xyz': 12}
...