如何在python中比较两个列表并在字典中返回它们

如何在python中比较两个列表并在字典中返回它们,python,arrays,python-3.x,dictionary,Python,Arrays,Python 3.x,Dictionary,我有两份清单: 姓名:[“玛丽”、“杰克”、“罗斯”、“玛丽”、“卡尔”、“弗雷德”、“梅格”、“菲尔”、“卡尔”、“杰克”、“弗雷德”、“玛丽”、“菲尔”、“杰克”、“玛丽”、“弗雷德”、“梅格”] 等级:[80,88,53,80,64,61,75,80,91,82,68,76,95,58,89,51,81,78] 我希望能够取得每个人的平均考试成绩。例如,Mary在姓名列表中出现4次,我希望能够获取映射到她的考试分数,并获取平均值 问题是如何将重复的名字与考试分数进行比较 注:我确实知道成绩

我有两份清单: 姓名:
[“玛丽”、“杰克”、“罗斯”、“玛丽”、“卡尔”、“弗雷德”、“梅格”、“菲尔”、“卡尔”、“杰克”、“弗雷德”、“玛丽”、“菲尔”、“杰克”、“玛丽”、“弗雷德”、“梅格”]

等级:
[80,88,53,80,64,61,75,80,91,82,68,76,95,58,89,51,81,78]

我希望能够取得每个人的平均考试成绩。例如,Mary在姓名列表中出现4次,我希望能够获取映射到她的考试分数,并获取平均值

问题是如何将重复的名字与考试分数进行比较

注:我确实知道成绩表比名字表长,但这是给我的两份名单

以下是我迄今为止所做的工作

def平均等级(名称、等级):
平均数=dict()
名称\u计数器=0
对于名称中的名称:
#如果名称相同
如果名称==名称:
#计算名称的出现次数
名称\u计数器+=1
打印(名称/计数器)
#循环浏览各个等级
#按年级划分的年级:
#印刷品(年级)

您可以并行迭代,找到它们的平均值并添加到字典中:

from itertools import groupby
from collections import defaultdict

names = ['Mary', 'Jack', 'Rose', 'Mary', 'Carl', 'Fred', 'Meg', 'Phil', 'Carl', 'Jack', 'Fred', 'Mary', 'Phil', 'Jack', 'Mary', 'Fred', 'Meg']    
grades = [80, 88, 53, 80, 64, 61, 75, 80, 91, 82, 68, 76, 95, 58, 89, 51, 81, 78]

d = defaultdict(int)
f = lambda x: x[0]
for k, g in groupby(sorted(zip(names, grades), key=f), key=f):
    grp = list(g)
    d[k] = sum(x[1] for x in grp) / len(grp)

print(d)
这里有一个方法:

from collections import defaultdict, Counter

names = ['Mary', 'Jack', 'Rose', 'Mary', 'Carl', 'Fred', 'Meg', 'Phil', 'Carl', 'Jack', 'Fred', 'Mary', 'Phil', 'Jack', 'Mary', 'Fred', 'Meg']

grades = [80, 88, 53, 80, 64, 61, 75, 80, 91, 82, 68, 76, 95, 58, 89, 51, 81, 78]

score = defaultdict(int)
# this line initializes a default dict with default value = 0

frequency = Counter(names)
# this yields: Counter({'Mary': 4, 'Jack': 3, 'Fred': 3, 'Carl': 2, 'Meg': 2,'Phil': 2, 'Rose': 1})

for name, grade in zip(names, grades):
    score[name] = score.get(name,0)+(grade / frequency[name])
    # here you add the (grade of name / count of name) to each name,
    # score.get(name,0) this line adds a default value 0 if the key does not exist already

print(score)
输出:

defaultdict(<class 'int'>, {'Mary': 81.25, 'Jack': 76.0, 'Rose': 53.0, 'Carl': 77.5, 'Fred': 60.0, 'Meg': 78.0, 'Phil': 87.5})
defaultdict(,{'Mary':81.25,'Jack':76.0,'Rose':53.0,'Carl':77.5,'Fred':60.0,'Meg':78.0,'Phil':87.5})
注意:它忽略了最后一个等级,因为我不知道该怎么处理它