首页 > 解决方案 > 有没有办法在嵌套的 for 循环中访问生成器中每个元素的属性?

问题描述

我想在生成器和列表上运行嵌套循环。在循环中,我想访问每个元素的属性。

我发现了关于循环对象属性的类似代码问题,但我无法解决我遇到的问题。

以下是我的代码工作:

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 没有为 .append 方法中的“名称”赋值。

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

我该如何解决这个问题?谢谢你。

标签: pythonlistdictionarygeneratornested-loops

解决方案


我遇到了一个问题,即 python 不会在 .append 方法中循环“名称”。

循环遍历 的值并将f_list它们分配给变量name。问题是属性访问表达式,例如sub.name,不检查匹配变量的本地范围并将名称替换为其值。局部变量命名的存在或不存在name不会改变sub.name将在子对象上查找字面上命名为“名称”的属性的事实。

给定一个包含属性名称的字符串,您可以使用它getattr来获取对象的属性。

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

推荐阅读