【问题标题】:Count Distinct Values in a List of Lists - Python计算列表列表中的不同值 - Python
【发布时间】:2017-02-21 20:40:45
【问题描述】:

我刚刚将 .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)

【问题讨论】:

    标签: python python-2.7 list count


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这就是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}集合理解

      【讨论】:

        【解决方案3】:

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

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

        还有频率,你可以用collections.Counter:

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

        【讨论】:

          【解决方案4】:

          对于第一个问题,使用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})
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-10-11
            • 1970-01-01
            • 1970-01-01
            • 2020-11-27
            • 2020-05-12
            相关资源
            最近更新 更多