Подсчет различных значений в списке списков - Python
Я только что импортировал значения из CSV-файла в список списков, и теперь мне нужно знать, сколько там разных пользователей. Сам файл выглядит следующим образом:
[['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)
5 ответов
Использование [i[0] for x in result_list]
чтобы получить список всех идентификаторов. Затем вы создаете set
, это весь список всех уникальных предметов в этом списке. Длина набора даст вам количество уникальных пользователей.
len(set([i[0] for x in result_list]))
Для первого вопроса используйте 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})
Ну, это то, что 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())
даст общее количество элементов).
РЕДАКТИРОВАТЬ: по-видимому, вы хотите посчитать количество отдельных пользователей. Вы можете сделать это с:
len({x[0] for x in result_list})
{.. for x in result_list}
установлено понимание.
Чтобы получить отдельных пользователей, вы можете использовать набор:
result_distinct = len({x[0] for x in result_list})
И частоты, вы можете использовать collections.Counter
:
freqs = collections.Counter([x[1] for x in result_list])
A=[[0, 1],[0, 3],[1, 3],[3, 4],[3, 6],[4, 5],[4, 7],[5, 7],[6, 4]]
K = []
for _ in range(len(A)):
K.extend(A[_])
print(set(K))
ВЫХОД:
{0, 1, 3, 4, 5, 6, 7}
В питонеextend
функция расширяет список, а не добавляет его, что нам нужно, а затем используемset
для печати различных значений.