Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中组织对象的随机列表_Python_Sorting_Grouping - Fatal编程技术网

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

在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:

所以我有一个列表,我想把它转换成一个包含每组对象列表的列表

即 ['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

当原始列表有大约100000个ID时,它似乎运行得很快。。。但我很好奇是否有更好的方法来做到这一点。对象或属性的顺序并不重要。有什么想法吗?

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

一般的算法是使用多重映射:一个每个键有多个值的映射。 然后,您将扫描原始列表,将每个元素分离为一个对象和属性,然后为该对象和属性添加一个键值对。在这个周期结束时,您将有一个从对象到属性集的映射。然后,您可以对其进行迭代以构建最终列表

您可以使用第三方多重映射,也可以通过映射到序列来实现自己


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

@Saebin:您的问题属于我们的姐妹站点Stack Overflow,不久将迁移到那里。您需要在此处注册帐户,在堆栈溢出时注册帐户,并将它们关联在一起以重新获得问题的所有权。不会发生重复,组的顺序及其属性也不重要。如果没有为对象提供属性,则仍然需要创建一个组,它只是还不包含属性。我没有提到的最大限制是原始object.property字符串必须保留。。。否则,当我将object.property字符串传递给其他函数时,我将不得不重新生成该字符串。因此,尽管我可以使用字典之类的东西来存储结果,比如d[object1=['attr1','attr2']],但最终我需要为每个属性重新组合对象和属性。