2013-06-28 41 views
4

Im在某个问题上停滞不前,我一直都在这个问题上一直围绕,直到我迷惑自己。Python:基于单词的第一个字符的分割列表

我所试图做的是采取的单词列表:

['About', 'Absolutely', 'After', 'Aint', 'Alabama', 'AlabamaBill', 'All', 'Also', 'Amos', 'And', 'Anyhow', 'Are', 'As', 'At', 'Aunt', 'Aw', 'Bedlam', 'Behind', 'Besides', 'Biblical', 'Bill', 'Billgone'] 

然后对它们进行排序,并根据字母顺序:

A 
About 
Absolutely 
After 

B 
Bedlam 
Behind 

等等

是存在的,简单的方法来做到这一点?

回答

8

通过特定的按键,比如第一个字母使用itertools.groupby()将你输入:

from itertools import groupby 
from operator import itemgetter 

for letter, words in groupby(sorted(somelist), key=itemgetter(0)): 
    print letter 
    for word in words: 
     print word 
    print 

如果列表已经排序,则可以省略sorted()电话。可回叫的itemgetter(0)将返回每个单词的第一个字母(索引0处的字符),然后groupby()将产生该密钥加上一个只包含那些密钥保持不变的项目的迭代。在这种情况下,这意味着循环使用words会为您提供以相同字符开头的所有项目。

演示:

>>> somelist = ['About', 'Absolutely', 'After', 'Aint', 'Alabama', 'AlabamaBill', 'All', 'Also', 'Amos', 'And', 'Anyhow', 'Are', 'As', 'At', 'Aunt', 'Aw', 'Bedlam', 'Behind', 'Besides', 'Biblical', 'Bill', 'Billgone'] 
>>> from itertools import groupby 
>>> from operator import itemgetter 
>>> 
>>> for letter, words in groupby(sorted(somelist), key=itemgetter(0)): 
...  print letter 
...  for word in words: 
...   print word 
...  print 
... 
A 
About 
Absolutely 
After 
Aint 
Alabama 
AlabamaBill 
All 
Also 
Amos 
And 
Anyhow 
Are 
As 
At 
Aunt 
Aw 

B 
Bedlam 
Behind 
Besides 
Biblical 
Bill 
Billgone