Python кортеж операций и количество

У меня есть следующий кортеж. Я хочу построить строку, которая выводит, как указано в 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)

Решение Вопроса

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)
 29 июн. 2012 г., 13:18
Некоторое объяснение, почему это работает, было бы хорошо.
 29 июн. 2012 г., 13:34
Counter чисто подходит для подсчета уникальных битов информации. Так что, если все, что вы хотите сделать, это считать события, то да,Counter лучше подходит.
 29 июн. 2012 г., 13:21
collection.Counter лучше подходит здесь
 Rajeev29 июн. 2012 г., 13:32
@gnibbler: Как счетчик лучше подходит. Это также работает довольно хорошо, правильно. Для вывода я повторяю цикл во второй раз в обоих случаях. Какие преимущества я получу с счетчиком
 29 июн. 2012 г., 13:20
+1 довольно просто. я просто написал один и тот же код :))))

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. Теперь вы можете переставлять элементы в нужном порядке и конвертировать их в строку, если это необходимо.

Ваш ответ на вопрос