2013-10-24 4 views
2

мой код дает мне выход в виде спискаGroupBy список по категории

def extractKeywords(): 
    <code> 
    return list 

list = [] 
data = extractKeywords() 
for x in range(0,5): 
    get = data[0][x] 
    list.append(get) 
print list12 

список Выход

['LION', 'tv', 'TIGER', 'keyboard', 'cd-writer','ELEPHANT'] 

Как я могу классифицировать этот список на две группы, такие как (ожидаемый выход)

Animals = ['LION', 'TIGER', 'ELEPHANT'] 
Electronics = ['tv', 'keyboard', 'cd-writer'] 

Все животные находятся в Capital letter и Электроника находятся в small letters

ответ

1
mylist = ['LION', 'tv', 'TIGER', 'keyboard', 'cd-writer','ELEPHANT'] 
[word for word in mylist if word==word.lower()] 
+0

Не вернем ли это только нижний регистр. Верхний регистр по существу выброшен. – RMcG

+0

Я тоже сделал для Upper !! я понял ! :) спасибо – WEshruth

+0

Если это решает вашу проблему, тогда, пожалуйста, примите в качестве ответа. :) –

1

Вот один из возможных решений

>>> from itertools import tee 
>>> 
>>> def splitOnCondition(lst, condition): 
... l1, l2 = tee((condition(i), i) for i in lst) 
... return [i for c, i in l1 if c], [i for c, i in l2 if not c] 
... 
>>> splitOnCondition(['LION', 'tv', 'TIGER', 'keyboard', 
... 'cd-writer','ELEPHANT'], lambda x: x==x.lower()) 
(['tv', 'keyboard', 'cd-writer'], ['LION', 'TIGER', 'ELEPHANT']) 
2

Это решение использует itertools.groupby, чтобы избежать обхода списка дважды.

>>> from itertools import groupby 
>>> data = ['LION', 'tv', 'TIGER', 'keyboard', 'cd-writer','ELEPHANT'] 
>>> # upper case letters have lower `ord` values than lower case letters 
>>> sort_by_case = sorted(data, key=lambda word: ord(word[0])) 
>>> sort_by_case 
['ELEPHANT', 'LION', 'TIGER', 'cd-writer', 'keyboard', 'tv'] 
>>> # group the words according to whether their first letter is upper case or not 
>>> group_by_case = groupby(sort_by_case, lambda word: word[0].isupper()) 
>>> # use tuple unpacking to assign the two groups to appropriate variables 
>>> upper_case, lower_case = [list(g) for (k, g) in group_by_case] 
>>> upper_case 
['ELEPHANT', 'LION', 'TIGER'] 
>>> lower_case 
['cd-writer', 'keyboard', 'tv'] 
Смежные вопросы