2017-02-21 7 views
1

Я просто импортировал значения из CSV-файла в список списков, и теперь мне нужно знать, сколько разных пользователей есть. Сам файл выглядит как следующее:Подсчитайте отличительные значения в списке списков - Python

[['123', 'apple'], ['123', 'banana'], ['345', 'apple'], ['567', 'berry'], ['567', 'banana']] 

В принципе, мне нужно знать, сколько различных пользователей (первое значение в каждом подспискоме это идентификатор пользователя) есть (3 в этом случае, более 6000 после выполнения некоторые фильтры Excel), и каковы частоты для самой пищи: {'apple': 2, 'banana': 2, 'berry': 1}.

Вот код, который я пытался использовать для различных значений отсчетов (с использованием Python 2.7):

import csv 
with open('food.csv', 'rb') as food: 
    next(food) 
    for line in food: 
     csv_food = csv.reader(food) 
     result_list = list(csv_follows) 

result_distinct = list(x for l in result_list for x in l) 

print len(result_distinct) 

ответ

0

Используйте [i[0] for x in result_list], чтобы получить список всех идентификаторов. Затем вы создаете set, то есть весь список всех уникальных элементов в этом списке. Затем длина набора даст вам количество уникальных пользователей.

len(set([i[0] for x in result_list])) 
0

Ну это то, что Counter все о:

import csv 
from collections import Counter 

result_list = [] 

with open('food.csv', 'rb') as food: 
    next(food) 
    for line in food: 
     csv_food = csv.reader(food) 
     result_list += list(csv_follows) 

result_counter = Counter(x[1] for x in result_list) 

print len(result_counter)

Counter это специальный словарь. Внутренний словарь будет содержать {'apple': 2, 'banana': 2, 'berry': 1}, чтобы вы могли проверять все элементы с их подсчетами. len(result_counter) даст количество отдельных элементов тогда как sum(result_counter.values()) будет дать общее количество элементов).

EDIT: по-видимому, вы хотите, чтобы подсчитать количество различныхпользователей. Вы можете сделать это с помощью:

len({x[0] for x in result_list}) 

{.. for x in result_list}это набор понимание.

0

Чтобы получить отдельных пользователей, вы можете использовать набор:

result_distinct = len({x[0] for x in result_list}) 

и частоты, вы можете использовать collections.Counter:

freqs = collections.Counter([x[1] for x in result_list]) 
0

Для первого вопроса, используйте set,

import operator 

lists = [['123', 'apple'], ['123', 'banana'], ['345', 'apple'], ['567', 'berry'], ['567', 'banana']] 
nrof_users = len(set(map(operator.itemgetter(0), lists))) 

print(nrof_users) 
# 3 

Для второго вопроса используйте collections.Counter,

import collections 
import operator 

result = collections.Counter(map(operator.itemgetter(1), lists)) 

print(result) 
# Counter({'apple': 2, 'banana': 2, 'berry': 1}) 
Смежные вопросы