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

Python 用于计算多个运行总计的函数,python,function,variables,Python,Function,Variables,我有一个元组列表 (something1, 500) (something1, 200) (something1, 300) (something2, 200) (something2, 600) (something2, 400) 我在pySpark中编写了一个函数来进行计算,以得到类似这样的结果。该函数基本上需要汇总发生的计数总数 (something1, 1000), (something2, 1200) 我目前的职能 def add_func

我有一个元组列表

 (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)
我面临的问题

  • 我无法在pySpark控制台将该函数粘贴为一个函数。它被拆分为多个提示
  • 它表示第6行出现语法错误(recur_total+=value) 我做错了什么?如何纠正

  • 我无法在pySpark控制台将该函数粘贴为一个函数。它被拆分为多个提示

  • 我不明白你这是什么意思。只要缩进正确,“多个提示”就可以正确创建单个函数

  • 它表示第6行出现语法错误(recur_total+=value)

  • 此错误意味着您似乎正在正确粘贴代码。要纠正错误,请仔细检查给出语法错误的行上的间距。

    其他人已经指出了关于正确缩进的问题的答案,但我的2美分是关于整个函数本身的

    您想要完成的任务只需使用
    itertools的
    groupby
    即可完成

    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)
    

    只要缩进正确,“多个提示”确实正确地创建了一个函数。请仔细检查给出语法错误的行上的间距。最后一个if语句的内部间距似乎过大。我在记事本中创建了此函数,并且每行都从行的开头开始。所以应该没有压痕的问题。粘贴在这里的代码已经格式化为可读性。如果你是指Windows记事本,那么我会小心的。我的理解是,它不是一个很好的文本编辑器。我在记事本中创建了这个函数,并且每行都从行首开始。所以应该没有压痕的问题。粘贴在此处的代码已格式化为readability@Raghu在python中,缩进很重要。要使代码正常工作,必须在记事本中正确缩进。我建议下载一个专为Notepad++、Sublime text 3或Atom等编程而设计的文本编辑器。为什么不在每组上运行sum而不是重新设计轮子呢+1介绍groupby两种方法。@Mad physical like how?用
    result=sum(x[1]表示组中的x)替换整个内部循环。
    我正在pySpark控制台上运行此函数。所以可能无法导入。@Raghu
    itertools
    是python中内置的模块。无论您是运行独立应用程序还是在pyspark CLI中运行代码,都应该能够使用它。还有@Mad Physicator,我以为你在引用
    reduce