2013-08-16 3 views
0

Если у меня есть список питона с формой, как это:Перестройка список питона, сохраняя при этом порядок

T = [ 
['07,07,2012 22:10', ['people','drama','melody','bun']], 
['08,07,2012 21:04', ['queen','group']], 
['08,07,2012 21:23', ['printing','market','shopping']], 
['08,07,2012 21:04', ['people','bun']], 
['08,11,2012 11:14', ['kangaroo']] 
] 

Что мне нужно, чтобы преобразовать этот список в следующем формате:

T =[ 
['07,07,2012 22:10', 'people'], 
['07,07,2012 22:10', 'drama'], 
['07,07,2012 22:10', 'melody'], 
['07,07,2012 22:10', 'bun'], 
['08,07,2012 21:04', 'queen'], 
['08,07,2012 21:04', 'group'], 
['08,07,2012 21:23', 'printing'], 
['08,07,2012 21:23', 'market'], 
['08,07,2012 21:23', 'shopping'], 
['08,07,2012 21:04', 'people'], 
['08,07,2012 21:04', 'bun'], 
[''08,11,2012 11:14'', 'kangaroo'] 
] 

т.е. Для каждого элемента, имеющего длину его первого подэлемента более 1 (в исходном списке T), разделите первый подэлемент (a[1] for a in T if len(a[1] > 1)) и добавьте его как другой список с той же отметкой времени. Возможно, у моих слов нет объяснений, но приведенные выше примеры определенно объясняют, что мне нужно делать. Любая помощь будет оценена по достоинству.

ответ

5

Используйте список понимание:

[(timestamp, item) for timestamp, items in T for item in items]

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

[[timestamp, item] for timestamp, items in T for item in items]

+1

Или используйте список вместо кортежа, чтобы получить именно то, что запросил ОП (не важно, однако). –

+0

Спасибо @ flornquake .. вы артистически суммировали все это. Большое спасибо :-) – khan

1

Попробуйте это на T:

def process(t): new = [] for i in t: for j in i[1]: new.append([i[0], j]) return new

+0

Список постижение будет быстрее и вещий. –

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