2015-03-31 4 views
0

У меня есть список человека «интересов», который выглядит так:Многократные Списки сортировки строк

[u'technology and computing', u'software', u'shareware and freeware'] 
[u'art and entertainment', u'shows and events', u'festival'] 
[u'art and entertainment', u'shows and events', u'circus'] 
[u'technology and computing', u'computer certification'] 
[u'news'] 
[u'religion and spirituality', u'islam'] 

Это таксономия выход из NLP API, и я пытаюсь запустить дальнейший анализ, где я почерпните более высокие выводы о том, какие вещи заинтересованы, на основе таких вещей, как часто появляется item[0]=='art and entertainment', и если да, то какие конкретные виды искусства и развлечений кто-то интересует (например, if item[0]=='art and entertainment': return item[:-1]

В любом случае, я мог бы использовать некоторые руководство по хорошему подходу. Моя первая мысль заключалась в том, чтобы рассчитать max(len()) из пункта в списке (в моем случае 5), а затем

for item in list: 
    append((max(len()) - len(item))*'null,') 

для того, чтобы убедиться, что все они имеют одинаковое количество «колонн», а затем преобразовать все это в именованный кортеж и сделать мульти -Спорция на этом. Похоже на раздражающий процесс. Есть ли более простой (но читаемый) способ справиться с этим?

Я думал об использовании NLTK или что-то в этом роде, но это кажется просто большой болью для настройки, даже если это облегчит анализ, как только я это сделаю.

ответ

0

Вы можете использовать itertools.izip_longet застегнуть свои списки, так что вы будете иметь список содержит столбцы основного списка, недостающие элементы были заменены None:

>>> from itertools import izip_longest 
>>> a=[[u'technology and computing', u'software', u'shareware and freeware'], 
... [u'art and entertainment', u'shows and events', u'festival'], 
... [u'art and entertainment', u'shows and events', u'circus'], 
... [u'technology and computing', u'computer certification'], 
... [u'news'], 
... [u'religion and spirituality', u'islam']] 

>>> list(izip_longest(*a)) 
[(u'technology and computing', u'art and entertainment', u'art and entertainment', u'technology and computing', u'news', u'religion and spirituality'), (u'software', u'shows and events', u'shows and events', u'computer certification', None, u'islam'), (u'shareware and freeware', u'festival', u'circus', None, None, None)] 

Затем вы можете сделать любую операцию на вашем столбцы, которые вы хотите!

Но если вы просто хотите добавить None в свой неполный список вы можете использовать itertools.repeat:

>>> max_len=max(map(len,a)) 
>>> from itertools import repeat 
>>> [i+list(repeat(None,max_len-len(i))) for i in a] 
[[u'technology and computing', u'software', u'shareware and freeware'], [u'art and entertainment', u'shows and events', u'festival'], [u'art and entertainment', u'shows and events', u'circus'], [u'technology and computing', u'computer certification', None], [u'news', None, None], [u'religion and spirituality', u'islam', None]] 
+0

Это, кажется, разорвать связь между между элементами подсписком, хотя. Это «шоу и события» - это, по сути, ребенок из «художественного и развлекательного» узла - это то, что мне нужно сохранить ..., что заставляет меня думать, может быть, я должен сделать анализ с деревьями. – AutomaticStatic

+0

@AutomaticStatic checkout the edit! – Kasramvd

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