2017-02-09 4 views
0

Я ищу одну линию, эффективный способ, заданный список, для вывода словаря с ключами в качестве отдельных значений в списке, а значения словаря - в списке.Python словарь счетчиков списка

Например,

a = [1,1,1,2,2,3,]  ##input 
b = {1: 3, 2: 2, 3: 1} ##output 

Я обнаружил, что {i: a.count(i) for i in a} работает отлично, но он будет делать лишние вычисления, например, в списке ввода a=[1,1,1], он перепишет ключ [1] со значением [3] 3 раза.

Я мог бы также сделать что-то более ручное, как показано ниже, но я ищу что-то более элегантное и простое.

b = {} 
for i in a: 
    if i in b: 
     b[i] += 1 
    else: 
     b[a] = 1 
+1

Вы можете обернуть ваш список 'a' в наборе. 'b = {i: a.count (i) для i в наборе (a)}'. Нет необходимости в модулях –

ответ

3

collections.Counter Использование:

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

Примечание, Counter подкласс dict:

>>> isinstance(b, dict) 
True 
+0

Если вы видите вопрос, на который был дан ответ на сайте раньше, вы можете отметить или проголосовать, чтобы закрыть его как дубликат (особенно, когда Googling заголовок вопроса был бы более чем достаточным для исследования). – TigerhawkT3

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