在Python中组织对象的随机列表
所以我有一个列表,我想把它转换成一个包含每组对象列表的列表 即 ['objA.attr1','objC','objA.attr55','objB.attr4'] 会回来吗 [['objA.attr1','objA.attr55'],['objC'],['objB.attr4'] 目前我使用的是:在Python中组织对象的随机列表,python,sorting,grouping,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:
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
当原始列表有大约100000个ID时,它似乎运行得很快。。。但我很好奇是否有更好的方法来做到这一点。对象或属性的顺序并不重要。有什么想法吗?这需要更好地定义:当没有财产时,你会怎么做?您希望最终列表的顺序是什么?复制品呢 一般的算法是使用多重映射:一个每个键有多个值的映射。 然后,您将扫描原始列表,将每个元素分离为一个对象和属性,然后为该对象和属性添加一个键值对。在这个周期结束时,您将有一个从对象到属性集的映射。然后,您可以对其进行迭代以构建最终列表 您可以使用第三方多重映射,也可以通过映射到序列来实现自己
您可能希望为对象没有属性的情况创建一个虚拟属性。@Saebin:您的问题属于我们的姐妹站点Stack Overflow,不久将迁移到那里。您需要在此处注册帐户,在堆栈溢出时注册帐户,并将它们关联在一起以重新获得问题的所有权。不会发生重复,组的顺序及其属性也不重要。如果没有为对象提供属性,则仍然需要创建一个组,它只是还不包含属性。我没有提到的最大限制是原始object.property字符串必须保留。。。否则,当我将object.property字符串传递给其他函数时,我将不得不重新生成该字符串。因此,尽管我可以使用字典之类的东西来存储结果,比如d[object1=['attr1','attr2']],但最终我需要为每个属性重新组合对象和属性。