Вопрос по string, python, tuples – Python кортеж операций и количество

4

У меня есть следующий кортеж. Я хочу построить строку, которая выводит, как указано в output. Я хочу подсчитать все элементы, соответствующие «a»; то есть, сколько k1 произошло с w.t 'a'; и так далее. Какой самый простой способ сделать это

a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')]

Вывод должен быть в строке output = & quot; & quot;

 a k1  3
 a k2  1
 b k1  1
 b k2  3
 c k3  1
 c k4  1

Ваш Ответ

2   ответа
6

Counter класс отcollections:

>>> a = [('a', 'k1'), ('b', 'k2'), ('a', 'k2'), ('a', 'k1'), ('b', 'k2'), ('a', 'k1'), ('b', 'k2'), ('c', 'k3'), ('c', 'k4')]
>>> from collections import Counter
>>> c = Counter(a)
Counter({('b', 'k2'): 3, ('a', 'k1'): 3, ('a', 'k2'): 1, ('c', 'k3'): 1, ('c', 'k4'): 1})

Ты можешь использоватьc.items() перебрать счет:

>>> for item in c.items():
...     print(item)
... 
(('a', 'k2'), 1)
(('c', 'k3'), 1)
(('b', 'k2'), 3)
(('a', 'k1'), 3)
(('c', 'k4'), 1)

Приведенный выше код Python 3.Counter класс новый в Python 2.7. Теперь вы можете переставлять элементы в нужном порядке и конвертировать их в строку, если это необходимо.

2

defaultdict, Диктофон по умолчанию работает как обычный словарь, за исключением того, что он имеет значение по умолчанию для пустых хранилищ ключей, так что вы можете легко увеличить свой счетчик, когда выполняете итерацию по своему набору данных.

a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')]
from collections import defaultdict
b = defaultdict(int)
for item in a:
    b[item] += 1

print b
defaultdict(<type 'int'>, {('a', 'k2'): 1, ('c', 'k3'): 1, ('b', 'k2'): 3, ('a', 'k1'): 3, ('c', 'k4'): 1})

А для красивой печати просто переберите полученные данные и распечатайте их так, как вы хотите.

for key, value in b.iteritems():
    print '%s %s %s' % (key[0], key[1], value)
Counter чисто подходит для подсчета уникальных битов информации. Так что, если все, что вы хотите сделать, это считать события, то да,Counter лучше подходит.
+1 довольно просто. я просто написал один и тот же код :))))
collection.Counter лучше подходит здесь
Некоторое объяснение, почему это работает, было бы хорошо.
@gnibbler: Как счетчик лучше подходит. Это также работает довольно хорошо, правильно. Для вывода я повторяю цикл во второй раз в обоих случаях. Какие преимущества я получу с счетчиком Rajeev

Похожие вопросы