所以我有一个列表要转换为包含每组对象列表的列表。
即 ['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时,似乎运行速度不错......但我很好奇是否有更好的方法来执行此操作。对象或属性的顺序无关紧要。有什么想法吗?
答案 0 :(得分:0)
这需要更好地定义:当没有财产时你会怎么做?您希望最终列表的顺序是什么?复制品怎么样?
一般算法是使用多地图:每个键具有多个值的地图。 然后,您将扫描原始列表,将每个元素分隔为“对象”和“属性”,然后为对象和属性添加键值对。在此循环结束时,您将拥有从对象到属性集的映射。然后,您可以对此进行迭代以构建最终列表。
您可以使用第三方多图或通过映射到序列来实现自己。
您可能希望为对象没有属性时的情况创建虚拟属性。