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))
这就是我想要做的:
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'
有没有办法解决这个问题?
解决方案
问题:如何迭代命名元组对象?
正如所指出的:使用 getattr(..)。– Willem Van Onsem
正如所指出的: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
推荐阅读
- r - 如何使用 R 中的百分位数为两种类型的样本制作箱线图
- google-app-engine - .net 核心通用主机在部署到谷歌云应用引擎时运行两次
- python - 如何使用 Ta-lib 或 Pandas 正确计算股票的 EMA?
- python - 在 python 中使用正则表达式的 csv 单元格中的抽象值
- aws-api-gateway - 如何使用 AWS API Gateway 将 Cognito 主体 ID 传递给集成请求标头?
- python - SciKit Gradient Boosting - 如何将预测与初始表相结合?
- c++11 - 指向静态变量的指针必须尊重规范形式?
- javascript - 是否有支持 css 3d 的 PhantomJs 替代方案
- apache-spark - spark.table 因 java.io.Exception 失败:Scheme 没有文件系统:abfs
- matlab - 如何制作一个给出几何分布概率的函数?