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]]
解释
键
,这是人名
,如果它已经存在于dict中,我们将获得它的值,这是一个由两个int项组成的列表
[acumative#u score,counter]
,这将把我们发送到else去#3。如果不是,我们就进入第二阶段键
(dict中的人名),并将其值设置为2个项目的新列表[当前评分,1]
,1
是第一个评分。这是一个计数器
我们稍后需要它进行平均值
计算键
和项
,因此我们在每次迭代中得到键
(人名)和值
(两个项的列表,第一项是总分
,第二项是分数
)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]]