在Python中组织一个随机的对象列表

时间:2010-05-13 17:16:27

标签: python sorting grouping

所以我有一个列表要转换为包含每组对象列表的列表。

即 ['objA.attr1','objC','objA.attr55','objB.attr4'] 会回来的 [['objA.attr1','objA.attr55'],['objC'],['objB.attr4']]

目前这是我使用的:

givenList = ['a.attr1', 'b', 'a.attr55', 'c.attr4']
trgList = []
objNames = []
for val in givenList:
    obj = val.split('.')[0]
    if obj in objNames:
        id = objNames.index(obj)
        trgList[id].append(val)
    else:
        objNames.append(obj)
        trgList.append([val])
#print trgList

当原始列表有大约100,000个ID时,似乎运行速度不错......但我很好奇是否有更好的方法来执行此操作。对象或属性的顺序无关紧要。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这需要更好地定义:当没有财产时你会怎么做?您希望最终列表的顺序是什么?复制品怎么样?

一般算法是使用多地图:每个键具有多个值的地图。 然后,您将扫描原始列表,将每个元素分隔为“对象”和“属性”,然后为对象和属性添加键值对。在此循环结束时,您将拥有从对象到属性集的映射。然后,您可以对此进行迭代以构建最终列表。

您可以使用第三方多图或通过映射到序列来实现自己。

您可能希望为对象没有属性时的情况创建虚拟属性。

相关问题