如何迭代namedtuple对象?

2024-10-05 15:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我所拥有的:

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))

这就是我想做的:

^{pr2}$

build只是一个随机列表。在

这是我得到的错误:

AttributeError: 'Sites' object has no attribute 'p'

有没有办法解决这个问题?在


Tags: sitenamedtuplesitesp2p3p5p1p4
1条回答
网友
1楼 · 发布于 2024-10-05 15:23:50

Question: How to iterate on a namedtuple object?

如前所述:使用getattr(..)。–威廉·范恩森
如前所述:Sites。。。没有p…,他们有p1, p2, p3, etc-马蒂诺

你必须这样使用它:

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))

Output:

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测试

相关问题 更多 >