Подсчет различных значений в списке списков - 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для печати различных значений.

Другие вопросы по тегам