Организация случайного списка объектов в Python - PullRequest
0 голосов
/ 13 мая 2010

Итак, у меня есть список, который я хочу преобразовать в список, содержащий список для каждой группы объектов.

т.е. ['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 идентификаторов ... но мне любопытно, есть ли лучший способ сделать это. Порядок объектов или атрибутов не имеет значения. Есть идеи?

1 Ответ

0 голосов
/ 13 мая 2010

Это должно быть лучше определено: что вы делаете, когда нет собственности? В каком порядке вы хотите получить окончательный список? А как насчет дубликатов?

Общий алгоритм будет состоять в том, чтобы использовать мультикарту: карту, которая имеет несколько значений на ключ. Затем вы просканируете исходный список, разделите каждый элемент на «объект» и «свойство», а затем добавите пару ключ-значение для объекта и свойства. В конце этого цикла у вас будет отображение объектов на набор свойств. Затем вы можете повторить это, чтобы составить окончательный список.

Вы можете использовать стороннюю мультикарту или реализовать себя, сопоставляя последовательность.

Возможно, вы захотите создать фиктивное свойство для случаев, когда у объекта нет свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...