我有一个对象列表(群集),每个对象都有一个属性vertices
,这是一个数字列表。我想构建一个字典(使用一个字符串),使得键是一个顶点号,值是实际列表中相应簇的索引。
前:
clusters[0].vertices = [1,2]
clusters[1].vertices = [3,4]
预期产出:
{1:0,2:0,3:1,4:1}
我想出了以下内容:
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])]))
它有效......但有更好的方法吗?
同时评论上述代码的效率。
PS:顶点列表是不相交的。
答案 0 :(得分:5)
这是一个相当简单的解决方案,使用嵌套的for
:
dict((vert, i) for (i, cl) in enumerate(clusters) for vert in cl.vertices)
这也比问题中的版本更有效,因为它在收集dict的数据时不会构建大量的中间列表。