2016-10-25 2 views
4

Учитывая словарь списков, как это: d={0:[0.1,0.2,0.1], 1:[1.1,1.2,0.1], 2:[2.1,2.2,0.1]}Python: использование счетчика в словаре списков

Я хочу, чтобы иметь возможность подсчитать, сколько раз появляется каждое отдельное значение во всех списках. В приведенном примере, предполагаемый результат будет:

occurrences={0.1:4, 0.2:1, 1.1:1, 1.2:1, 2.1:1, 2.2:1}

Я думал об использовании Counter в линии, как это:

occurrences = Counter([k[0] for k in d.values()])

но вывод Counter({0.1: 1, 1.1: 1, 2.1: 1}), а это означает, что предыдущая строка учитывает только вхождения первого элемента каждого списка.

Как увеличить этот счет до всех элементов всех списков?

+0

ли элементы в списках плавает? Если это так, вам нужно будет определить допуски, чтобы получить значимые результаты. –

ответ

5

Поскольку вы, кажется, не заботиться о клавишах Словаре, вы можете просто использовать понимание:

>>> Counter(v for sublist in d.values() for v in sublist) 
Counter({0.1: 4, 0.2: 1, 1.1: 1, 1.2: 1, 2.1: 1, 2.2: 1}) 
3

Вы должны поместить все списки значений в одном плоском списке, а затем сосчитать. Вы можете передать список в словаря значений для itertools.chain.from_iterableк выравниваться их:

from collections import Counter 
from itertools import chain 

d={0:[0.1,0.2,0.1], 1:[1.1,1.2,0.1], 2:[2.1,2.2,0.1]} 
c = Counter(chain.from_iterable(d.values())) 
print(c) 
# Counter({0.1: 4, 0.2: 1, 1.2: 1, 2.2: 1, 1.1: 1, 2.1: 1}) 
Смежные вопросы