2013-06-28 2 views
4

Я как бы застрял в проблеме, и Ive обошлось вокруг, пока я не смутил себя.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 
Смежные вопросы