我刚刚开始使用Python进行Houdini建模软件。
我想要做的是创建一个包含“点坐标”和“建筑物等级值”的排序/字典。然后,我想为每组点坐标使用for循环,并使用匹配的级别属性。
到目前为止我所拥有的是:
for point in geo.points():
for i in range(-1,levels):
if i == -1:
pos = point.position()
else:
pos = point.position() + hou.Vector3((0, level_height,0))
coord = []
coord.append(pos)
for position in coord:
point = geo.createPoint()
point.setPosition(position)
point.setAttribValue(pointlevel, i+1)
point.setAttribValue(building, cluster)
我真正想做的是:
for each buildinglevel:
do for loop for all points with that buildinglevel
我的知识有限,但我知道自己想要达到的目标,最简单的方法是什么?
答案 0 :(得分:1)
您要查找的功能称为itertools.groupby()
。 groupby()
将按照您提供的密钥对可迭代进行分组,如果输入已经分类到这样的组。
from itertools import groupby
for pointlevel, points in groupby(geo.points(), key=pointlevel_of_point):
for point in points:
# do something with all points for this pointlevel.
其中pointlevel_of_point
是一个函数,它返回geo.points()
返回的任何点的级别。
groupby()
的作用是为您提供key
函数的当前返回值,以及一个新的iterable,它保证返回key
函数返回值不为的所有元素变化