我有一个对象列表(簇),每个对象都有一个属性vertices列表.我想构造一个字典(使用一个衬管),使得键是顶点编号,值是实际列表中相应簇的索引.
例如:
clusters[0].vertices = [1,2]
clusters[1].vertices = [3,4]
Run Code Online (Sandbox Code Playgroud)
预期产出:
{1:0,2:0,3:1,4:1}
Run Code Online (Sandbox Code Playgroud)
我想出了以下内容:
dict(reduce(lambda x,y:x.extend(y) or x, [
dict(zip(vertices, [index]*len(vertices))).items()
for index,vertices in enumerate([i.vertices for i in clusters])]))
Run Code Online (Sandbox Code Playgroud)
它有效......但有更好的方法吗?
还要评论上面一段代码的效率.
PS:顶点列表是不相交的.
这是一个相当简单的解决方案,使用嵌套for:
dict((vert, i) for (i, cl) in enumerate(clusters) for vert in cl.vertices)
Run Code Online (Sandbox Code Playgroud)
这也比问题中的版本更有效,因为它在收集dict的数据时不会构建大量的中间列表.