2015-11-25 2 views
-6

Предположим, у меня есть списокКак подсчитать элементы в списке и вернуть dict?

L = ['hello', 'hello', 'hi', 'hello', 'hello'] 

Я хочу, чтобы подсчитать, сколько 'hello' и 'hi' в списке. Так что результат 'hello': 4, 'hi': 1.

Как бы реализовать этот результат в форме словаря? Мой профессор еще не перешел к этому, поэтому я не уверен, как конвертировать из списка в словарь.

+0

ты слышал о 'Counter'? –

+0

Это, вероятно, не в духе домашней работы. – TigerhawkT3

+8

Вам нужно будет показать нам некоторую попытку решить это, так как SO не является службой завершения домашней работы. – TigerhawkT3

ответ

0

не используя никаких внешних модулей и только count, хотя бы некоторая избыточность, используя ДИКТ понимание:

d = {itm:L.count(itm) for itm in set(L)} 

Если вам разрешено использовать внешние модули и не нужно реализовывать все по своему усмотрению, вы можно использовать в Python defaultdict, который поставляется через collections модуль:

#!/usr/bin/env python3 
# coding: utf-8 

from collections import defaultdict 

word_list = ['hello', 'hello', 'hi', 'hello', 'hello'] 

d = defaultdict(int) 
for word in word_list: 
    d[word] += 1 

print(d.items()) 

Давать вам:

dict_items([('hi', 1), ('hello', 4)]) 

EDIT: Как указано в комментариях вы можете использовать Counter подобное, что было бы проще:

#!/usr/bin/env python3 
# coding: utf-8 

from collections import Counter 

word_list = ['hello', 'hello', 'hi', 'hello', 'hello'] 

c = Counter(word_list) 

print(c) 

Давать вам:

Counter({'hello': 4, 'hi': 1}) 
+0

['collections.Counter()'] (https://docs.python.org/ 3.5/library/collections.html # collections.Counter) –

+0

Я не понимаю нисходящего, его не плохой ответ, просто другой ответ – user2682863

+0

Ваш первый ответ был именно тем, что я ищу. Благодаря! –

1

использовать счетчик:

>>> from collections import Counter 
>>> def how_many(li): return Counter(li) 
... 
>>> how_many(['hello', 'hello', 'hi', 'hello', 'hello']) 
Counter({'hello': 4, 'hi': 1}) 

Или, вы можете сделать:

>>> li=['hello', 'hello', 'hi', 'hello', 'hello'] 
>>> {e:li.count(e) for e in set(li)} 
{'hi': 1, 'hello': 4} 

Или, вы можете сделать:

>>> di={} 
>>> for e in li: 
... di[e]=di.get(e, 0)+1 
... 
>>> di 
{'hi': 1, 'hello': 4} 
Смежные вопросы