2017-02-21 43 views
1

我剛剛將一個.csv文件中的值導入列表列表,現在我需要知道有多少不同的用戶在那裏。文件本身看起來像如下:在列表中計算不同的值 - Python

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

基本上,我需要知道有多少不同的用戶(在每個子列表首先看重的是用戶ID)在那裏(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]讓所有的ID的列表。然後您創建一個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())給出元素的總數)。

編輯:顯然你要算不同用戶數。你可以這樣做:

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})