Есть ли способ получить доступ к атрибуту каждого элемента в генераторе во вложенном цикле? - PullRequest
1 голос
/ 05 апреля 2019

Я хочу запустить вложенный цикл над генератором и списком. В цикле я хочу получить доступ к атрибуту каждого элемента.

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

Ниже мой код работы:

gen = api.search_submissions() # gen is generator of submissions

f_list = ['id','title']

sub_dict = {
    'id':[],
    'title':[]
}

for sub in gen:
    for name in f_list:
        sub_dict[name].append(sub.name)

Я столкнулся с проблемой, что python не присваивает значения «name» внутри метода .append.

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
AttributeError: 'submission' object has no attribute 'name'

Как я могу обойти эту проблему? Спасибо.

1 Ответ

2 голосов
/ 05 апреля 2019

Я столкнулся с проблемой, что python не зацикливается на имени в методе .append.

Цикл циклически перебирает значения f_list и присваивает их переменной name. Проблема заключается в том, что выражения доступа к атрибуту, такие как sub.name, не проверяют локальную область для соответствующей переменной и заменяют имя на его значение. Наличие или отсутствие локальной переменной с именем name не меняет того факта, что sub.name будет искать атрибут с буквальным именем «name» в подобъекте.

Вы можете использовать getattr, чтобы получить атрибут объекта, учитывая строку, содержащую имя атрибута.

sub_dict[name].append(getattr(sub,name))
...