Составьте список из списка, используя генератор - PullRequest
0 голосов
/ 01 апреля 2020

Я пытался превратить вывод моего списка в переменную. Довольно глупо, но независимо от того, что я пытаюсь, мне кажется, что я получаю пустой список (или переменную NoneType).

Я предполагаю, что это как-то связано с генератором, который он использует, но я не уверен, как его обойти, так как мне нужен генератор для получения желаемых результатов из моего файла JSON. (И я слишком разбираюсь в списках и генераторе newb ie, чтобы понять как).

Это рабочий фрагмент кода (первоначально был опубликован как ответ на эти вопросы ( здесь и здесь )).

Я бы хотел, чтобы вывод части print() был записан в список.

def item_generator(json_Response_GT, identifier):
    if isinstance(json_Response_GT, dict):
        for k, v in json_Response_GT.items():
            if k == identifier:
                yield v
            else:
                yield from item_generator(v, identifier)
    elif isinstance(json_Response_GT, list):
        for item in json_Response_GT:
            yield from item_generator(item, identifier) 

res = item_generator(json_Response_GT, "identifier")
print([x for x in res])

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Генератор сохраняет свое состояние, поэтому после того, как вы выполните итерацию по нему один раз (для печати), другая итерация начнется в конце и ничего не даст.

print([x for x in res]) # res is used up here
a = [x for x in res] # nothing left in res

Вместо этого сделайте следующее:

a = [x for x in res] # or a = list(res)
# now res is used up, but a is a fixed list - it can be read and accessed as many times as you want without changing its state
print(a)
1 голос
/ 01 апреля 2020

res = [x for x in item_generator(json_Response_GT, "identifier")] должен добиться цели.

...