计算列表列表中的不同值 - Python

时间:2017-02-21 20:40:46

标签: python python-2.7 list count

我刚刚将.csv文件中的值导入到列表列表中,现在我需要知道有多少不同的用户。该文件本身似乎如下:

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

基本上,我需要知道有多少不同的用户(每个子列表中的第一个值是用户ID)(在这种情况下3,在进行一些Excel过滤后超过6,000),以及什么是食物本身的频率:{'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)

4 个答案:

答案 0 :(得分:0)

使用[i[0] for x in result_list]获取所有ID的列表。然后创建一个set,即该列表中所有唯一项的列表。然后,集合的长度将为您提供唯一用户的数量。

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

答案 1 :(得分: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())提供元素总数)。

编辑:显然您想要计算不同 用户的数量。你可以这样做:

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

{.. for x in result_list}设置理解

答案 2 :(得分:0)

要获取不同的用户,您可以使用集合:

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

频率,您可以使用collections.Counter

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

答案 3 :(得分: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})