2010-05-13 2 views
0

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

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

+0

@Saebin: ваш вопрос относится к нашему сайту-сестре, переполнение стека и вскоре будет перенесен туда. вам необходимо будет зарегистрировать свою учетную запись здесь, зарегистрировать учетную запись в Stack Overflow и связать их вместе, чтобы вернуть право собственности на вопрос. –

ответ

0

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

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

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

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

+0

Дубликатов не произойдет, и порядок групп и их свойств не имеет значения. Если никакое свойство не задано с объектом, группа должна была бы быть создана, она просто не будет содержать свойства (пока). Самое большое ограничение, о котором я не упоминал, это исходная строка object.property должна быть сохранена ... в противном случае мне придется перестроить строку object.property, когда я перейду к ее другим функциям. Поэтому, хотя я мог бы использовать что-то вроде словаря для хранения результатов, т. Е. D [object1 = ['attr1', 'attr2']], в конечном итоге мне нужно, чтобы объект и свойство возвращались вместе для каждого свойства. – Saebin

Смежные вопросы