多个字符串排序列表

时间:2015-03-31 20:43:20

标签: python sorting collections

我有一个人的“兴趣”列表,如下所示:

[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或其他东西,但这似乎只是一个很大的痛苦设置,即使它会使我的分析更容易分析。

1 个答案:

答案 0 :(得分: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]]