Python 在列表列表中,如何查找与内部列表关联的值的平均值?

Python 在列表列表中,如何查找与内部列表关联的值的平均值?,python,arrays,list,arraylist,Python,Arrays,List,Arraylist,我有一张这样的清单 l=[[Alex,12],[John,14],[Ross,24],[Alex,42],[John,24],[Alex,45]] l=[[Alex,33],[John,19],[Ross,24]] 我应该如何处理这个列表以获得这样的输出 l=[[Alex,12],[John,14],[Ross,24],[Alex,42],[John,24],[Alex,45]] l=[[Alex,33],[John,19],[Ross,24]] 这基本上是每个名字的平均分数 l = [

我有一张这样的清单

l=[[Alex,12],[John,14],[Ross,24],[Alex,42],[John,24],[Alex,45]]
l=[[Alex,33],[John,19],[Ross,24]]
我应该如何处理这个列表以获得这样的输出

l=[[Alex,12],[John,14],[Ross,24],[Alex,42],[John,24],[Alex,45]]
l=[[Alex,33],[John,19],[Ross,24]]
这基本上是每个名字的平均分数

l = [['Alex',12],['John',14],['Ross',24],['Alex',42],['John',24],['Alex',45]]

score_dict = {}

for l_score in l:
    name = l_score[0]
    score = l_score[1]
    if name in score_dict.keys():
        score_dict[name].append(score)
        
    else:
        score_dict[name] = [score]

ret_list = []
for k, v in score_dict.items():
    sum_l = sum(v)
    len_l = len(v)
    if len_l > 0:
        avg = float(sum_l)/float(len_l)
    else:
        avg = 0
    ret_list.append([k,avg])
    
print(ret_list)
这将返回以下列表:

[['Ross', 24.0], ['Alex', 33.0], ['John', 19.0]]

我没有使用任何包,因为在您的代码示例中没有导入。它可以用numpy或pandas来简化,让我们通过从中构造新的
dict
来简化问题,其中键是名称或内部列表第一个元素,值是平均值。由于键在python dict中是唯一的,所以这变得很容易。完成此操作后,我们将从构建的dict生成一个新列表,这将是我们的答案

TheOriginalList=[[Alex,12],[John,14],[Ross,24],[Alex,42],[John,24],[Alex,45]] 
解释

  • 在#1中,我们试图获取
    ,这是
    人名
    ,如果它已经存在于dict中,我们将获得它的值,这是一个由两个int项组成的
    列表
    [acumative#u score,counter]
    ,这将把我们发送到else去#3。如果不是,我们就进入第二阶段
  • 在这里,我们添加
    (dict中的人名),并将其值设置为2个项目的新列表
    [当前评分,1]
    1
    是第一个评分。这是一个
    计数器
    我们稍后需要它进行
    平均值
    计算
  • 我们在这里得到#3,因为这个人已经存在于dict中。所以我们将其当前分数添加到分数中,在#4中,我们将计数器增加1
  • 我们对此进行解释(将计数器增加1)
  • 在#5中,我们迭代dict
    ,因此我们在每次迭代中得到
    (人名)和
    (两个项的列表,第一项是
    总分
    ,第二项是
    分数
  • 在#6中,我们通过添加一个新的列表(同样是两个项目的列表,在
    0索引中
    当前关键字的人名,在
    索引1中
    v[0]/v[1]
    的平均值)来构建我们的最终列表

  • 请注意,在某些情况下,此代码可以引发异常。考虑使用<代码>尝试,除了

    < P>使用大熊猫按名称分组并计算平均值(<代码> L>代码>是您的列表):

    df:

    输出:

    [['Alex', 33], ['John', 19], ['Ross', 24]]
    

    谢谢你的回答1.你能给我一个简短的建议吗packages@VivekAnand-你会来的。我喜欢你的问题。它让我想到了没有
    if else
    旧的学校代码的pythonic解决方案。如果你觉得它有用,我会很高兴你接受它。再次感谢:-)谢谢ehsan..我无法得到数据框架中的“l”(l,columns=[])@维维卡那就是你的问题清单。我使用了您的命名问题,并添加了编辑,以使其更清楚。如果可以,请查看如何接受答案。谢谢你,真的很有用,非常感谢…..如果我有三列,像这样的列=['name','value','value1'],并且我也找到了value1的平均值
    df=pd.DataFrame(l,columns=['name','value','value1'])
    然后
    l=df.groupby('name')['value','value1'].mean().reset\u index().values.tolist(),你能提出类似的建议吗
    
    [['Alex', 33], ['John', 19], ['Ross', 24]]