2015-04-09 4 views
0

Я хочу создать счетчик для каждого элемента и количество ранжировок (1-5) вхождениях.Python Counter в Counter для каждого элемента?

Например, структура [ «ДАТА», «ПРОДУКТ», «Ранжирование»]

[["1/1/15", "Product 1", "4"], ["1/1/15", "Product 1", "4"],  
["2/2/15", "Product 1", "1"], ["1/1/15", "Product 2", "1"], 
["1/1/15", "Product 2", "1"], ["3/1/15", "Product 2", "1"]] 

Требуемая выход будет

Date: 1/1/15, Product: 1, Ranking: 4, Seen: 2 
Date: 2/2/15, Product: 1, Ranking: 1, Seen: 1 
Date: 1/1/15, Product: 2, Ranking: 1, Seen: 2 
Date: 3/1/15, Product: 2, Ranking: 1, Seen: 1 

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

cc = Counter((rank, week) for rank, week in date_array) 

Я пробовал, но это только создаст счетчик для дат, однако я хочу использовать разные продукты.

Как бы я это сделал? Это были бы вложенные счетчики? В конечном итоге я хочу записать эту информацию в CSV.

+1

Если вы данные, как описано список кортежей, то вы можете напрямую позвонить 'с = счетчик (данные)' будет делать то, что вы хотите ... – AChampion

+0

@achampion, которые могли бы быть моя вина. Он изначально составлял их списки, и я редактировал их как кортежи, чтобы быть более стилистически последовательными. Однако 'Counter' не может индексировать списки, так что это, вероятно, проблема. Я возвращаюсь. –

ответ

3

Та же картина, как ранее предоставленные работы, конвертировать вложенные списки кортежей, вот родовая форма без распаковки:

c = Counter(tuple(i) for i in data) 
for k, v in c.items(): 
    print("Date: {}, Product: {}, Ranking: {}, Seen: {}".format(*k, v)) 
0

С вашей данной продукции, это выглядит как то, что вы пытаетесь сделать, чтобы получить a Counter объект, который считает весь кортеж. Это удивительно легко.

from collections import Counter 

data = [["1/1/15", "Product 1", "4"], ["1/1/15", "Product 1", "4"],  
     ["2/2/15", "Product 1", "1"], ["1/1/15", "Product 2", "1"], 
     ["1/1/15", "Product 2", "1"], ["3/1/15", "Product 2", "1"]] 

cc = Counter(map(tuple, data)) 

for grp,seen in cc.items(): 
    date, product, ranking = grp 
    product = product.split()[-1] # grab just the product number 
            # consider changing this in your data model 
    ordering = [date, product, ranking, seen] 
    print("Date: {}, Product: {}, Ranking: {}, Seen: {}".format(*ordering))