构造合并多个列表的字典

时间:2012-01-11 10:49:28

标签: python list

我有一个对象列表(群集),每个对象都有一个属性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:顶点列表是不相交的。

1 个答案:

答案 0 :(得分:5)

这是一个相当简单的解决方案,使用嵌套的for

dict((vert, i) for (i, cl) in enumerate(clusters) for vert in cl.vertices)

这也比问题中的版本更有效,因为它在收集dict的数据时不会构建大量的中间列表。