2017-02-21 17 views
-2

Допустим, у меня есть список идентификаторов клиентов, и категорию товара, который он покупает:Подсчет элементов в списке

[[ID0, 0], [ID1, 1], ...]

Клиент может появляться более одного раза, и также возможно, что он покупает один и тот же тип товара более одного раза.

Например, возможно, что у нас есть [ID0, 1], [ID0, 2], [ID0, 1], [ID1, 1], ... где-то в нашем списке.

Я хочу построить список, чтобы список [0] = идентификатор клиента и список [1] ​​= наиболее распространенный тип предмета, который он купил, а это означает, что идентификатор клиента появляется только один раз в списке.

Как это сделать?

+0

Просьба показать свои попытки. – Julien

+0

Извините. Все, что я могу думать, это наивное решение, использование вложенных циклов и счетчиков. Но, как вы знаете, это очень неэффективно. Я новичок в python, поэтому я действительно не знаю мощных библиотек, которые могут помочь. –

ответ

0

Если я что-то не хватает, не можете ли вы использовать словарь для этой цели? Это в основном гарантирует, что вы не получите дубликатов, и с помощью функции max вы можете получить максимальное значение. метод .get() гарантирует, что вы получите None, если ключ не найден.

Конечно, вы можете отформатировать словарь в виде списка, если это необходимо.

data = [ 
     ['ID0', 1], ['ID0', 2], ['ID0', 1], ['ID1', 1], 
     ['ID2', 5], ['ID5', 6] 
] 

dict = {} 
for item in data: 
    customer_id = item[0] 
    current_quantity = item[1] 
    #find maximum amount of what's already in dictionary vs current 
    dict[customer_id] = max(current_quantity, dict.get(customer_id))