【问题标题】:Python extract properties from list of listed objectsPython从列出的对象列表中提取属性
【发布时间】:2016-07-12 06:38:06
【问题描述】:

我有程序集类实例的列表。列表中的程序集总数可以更改。

ASM_list = [ASM1,ASM2,ASM3...etc]

每个组件都有一个零件列表(我已经过滤了所有组件都具有相同的零件)

ASM1.parts = ['hood','fender','door']
ASM2.parts = ['hood','fender','door']

每个部分都有属性

ASM1.parts[0].color = green
ASM2.parts[0].color = blue

我想打印出每个装配体的零件属性。示例输出:

part, ASM1, ASM2, ASM3
hood, green, blue, red
fender, black, red, yellow
door, yellow, green, orange

我在使用 zip 或 map 执行此操作时遇到问题。

我在下面尝试的示例。

parts_list = []
for ASM in ASM_list:
  parts_list.append([p.color for p in ASM.parts])
print zip(*parts_list)

“Python 食谱”和其他几个堆栈溢出帖子显示了如何同时遍历多个列表,我遇到的问题是程序集的数量发生了变化,所以我无法编写:

for a,b,c in ASM_lists:
  a.part.color, b.part.color, c.part.color

谢谢!

【问题讨论】:

    标签: python list properties


    【解决方案1】:

    假设您有一个 part_names 列表 - 如果您的部分对象对象具有 name 属性以及 color 属性,您可以通过以下方式获得:

    part_names = []
    for part in ASM_list[0].parts:
        part_names.append(part.name)
    

    然后你可以得到你想要的输出:

    headers = ["part"]
    for i, ASM in enumerate(ASM_list):
        headers.append("ASM%d" % (i+1))
    print(", ".join(headers))
    
    for i, part_colors in enumerate(zip(*parts_list)):
        part_name = part_names[i]
        print(part_name + ", " + ", ".join(part_colors))
    

    【讨论】:

    • 非常感谢您的洞察力。我还没有完全掌握这一切,截至目前,我在最终的打印语句中收到“预期的字符串,找到浮点数”错误。我试过 str(part_name) 无济于事。
    • 这行得通...失败来自我在浮动的零件属性(零件尺寸)上使用此模式。也许通过一些元组格式它可以重用?
    • " ".join(map(str, a)) 转换为用于连接的字符串。谢谢!
    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2015-11-01
    相关资源
    最近更新 更多