用于计算多个运行总计的函数

时间:2017-04-16 00:50:20

标签: python function variables

我有一个元组列表

 (something1, 500)
 (something1, 200)
 (something1, 300)
 (something2, 200)
 (something2, 600)
 (something2, 400)

我已经在pySpark中编写了一个函数来进行计算,得到这样的结果。该函数基本上需要总结发生的计数总数

 (something1, 1000),
 (something2, 1200)

到目前为止我的功能

             def add_function(key, value):
             last_key = None
             recur_total = 0
             key, value = join_data[0][0], join_data[0][1]
             if last_key == key: 
                 recur_total+ = value
             else:
                if last_key: 
                       recur_total = value
             if last_key == key:
                   recur_total = value
                last_key = key
              if last_key == key:
                   return(last_key, value)

我面临的问题

  1. 我无法在pySpark控制台上将该功能粘贴为一个功能。它被拆分为多个提示。
  2. 它表示第6行的语法错误(recur_total + = value)。
  3. 我做错了什么以及如何纠正这个问题?

2 个答案:

答案 0 :(得分:1)

  
      
  1. 我无法在pySpark控制台上将该功能粘贴为一个功能。它被分成多个提示。
  2.   

我不明白你的意思。只要您的缩进正确,“多个提示”就会正确创建一个函数。

  
      
  1. 它表示第6行的语法错误(recur_total + = value)。
  2.   

此错误表示您似乎正确粘贴了代码。要修复错误,请仔细检查提供语法错误的行上的间距。

答案 1 :(得分:1)

其他人已经指出了关于适当缩进的问题的答案,但是关于整个功能本身我的2美分..

您想要实现的任务可以使用groupby

itertools来完成
from itertools import groupby

data = [ ('something1', 500),
 ('something1', 200),
 ('something1', 300),
 ('something2', 200),
 ('something2', 600),
 ('something2', 400)]


for key, group in groupby(data, lambda x: x[0]):
      result = 0
      for things in group:
          result = result + things[1]
      print(key,result)