2013-06-28 3 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