这就是我所拥有的:
Site = namedtuple('Site', 'number x y')
Sites = namedtuple('Sites', 'p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14')
my_sites = Sites(Site('p1', 607, 184),
Site('p2', 698, 254),
Site('p3', 821, 309),
Site('p4', 569, 237),
Site('p5', 647, 302),
Site('p6', 727, 374),
Site('p7', 437, 289),
Site('p8', 548, 358),
Site('p9', 650, 416),
Site('p10', 352, 333),
Site('p11', 451, 432),
Site('p12', 222, 435),
Site('p13', 338, 507),
Site('p14', 431, 579))
这就是我想要做的:
cc = 1;
for x in build:
x = my_sites.p[cc].x
y = my_sites.p[cc].y
cc = cc + 1
build
只是一个随机列表。
这是我得到的错误:
AttributeError: 'Sites' object has no attribute 'p'
有什么办法解决这个问题?
答案 0 :(得分:0)
问题:如何迭代namedtuple对象?
如所指出的:使用getattr(..)。 –威廉·范昂塞姆
如所指出的:Sites
...没有p
...,他们有p1, p2, p3, etc
– martineau
您必须像这样使用它:
from collections import namedtuple
Site = namedtuple('Site', 'number x y')
Sites = namedtuple('Sites', 'p1 p2 p3')
my_sites = Sites(Site(1, 607, 184), Site(2, 698, 254), Site(3, 821, 309))
for x in [1,2,3]:
attr = "p{}".format(x)
site = getattr(my_sites, attr)
print("{}:{}".format(attr, site))
for attr in ['p1', 'p2', 'p3']:
print("{}:{}".format(attr, getattr(my_sites, attr)))
print("p2:{}".format(my_sites.p2))
输出:
p1:Site(number=1, x=607, y=184) p2:Site(number=2, x=698, y=254) p3:Site(number=3, x=821, y=309) Site(number=2, x=698, y=254)
使用Python测试:3.4.2