2015-01-19 2 views
2

У меня есть список, как это:создать словарь с элементами списков в качестве ключей и их количеством вхождения в качестве значения

my_list = [1, 1, 1, 1, 1, 2, 2, 2, 3] 

, и я хочу сделать словарь, как это:

result = {1: 5, 2: 3, 3: 1} 
# key is unique list items 
# and value is the times they have been repeated in list 

я мог получить это сделано этот кусок кода, но не выглядит хорошо:

def parse_list(my_list): 
    result = {} 
    my_set = set(my_list) 
    for i in my_set: 
     result[i] = len([j for j in my_list if j == i]) 
    return result 

Я думаю, что это должно быть достижимо с меньшим количеством петель. Любая идея?

+0

Да, если вы можете использовать библиотеки .. –

+0

да. Я могу использовать библиотеки. но не знаю, что использовать. – Taxellool

+1

https://docs.python.org/2/library/collections.html#collections.Counter Ваши вопросы уже получили ответ :) –

ответ

3

Вы можете использовать collections.Counter:

>>> from collections import Counter 
>>> my_list = [1, 1, 1, 1, 1, 2, 2, 2, 3] 
>>> Counter(my_list) 
Counter({1: 5, 2: 3, 3: 1}) 

>>> dict(Counter(my_list)) 
{1: 5, 2: 3, 3: 1} 
+0

wow! спасибо :) – Taxellool

+1

@Taxellool: Обратите внимание, что 'Counter' наследует от' dict', поэтому вы можете использовать его так же, как 'dict'. Так что окончательный шаг перехода на самом деле не нужен, но я думаю, если вы делаете много таких вещей, простой «dict» использует немного меньше памяти, чем «Counter». –

Смежные вопросы