# Calculate Average and add new key:value pairs to an existing dictionary

I need to find the average for the scores M1 and E1 for every name in the list and want to add another key: value pair called average : (M1+E1)/2. How do i add more key: value pairs under 2002 and 2008 ?

``````gradebook = {
2002: [
{"Name" : "John"},
{"M1" : 87},
{"E1" : 10},
{"Score" : 90},
],
2008 : [
{"Name" : "Paul"},
{"M1" : 83},
{"E1" : 59},
{"Score" : 77},
],
}

``````

Current output

``````|ID       Name        Grade
|2002       John       A
|2008       Paul       C

Expected
ID       Name        Average
2002       John       48.5
2008       Paul       71

``````

### >Solution :

I suggest to slightly modify the structure of `gradebook` before passing it to the `displayResult()` function:

``````gradebook = {
2002: [
{"Name": "John"},
{"M1": 87},
{"E1": 10},
{"Score": 90},
],
2008: [
{"Name": "Paul"},
{"M1": 83},
{"E1": 59},
{"Score": 77},
],
}

fmt_string = "{:<15}{:<15}{:<15}"

print(
fmt_string.format(
i, j["Name"], (j.get("M1", 0) + j.get("E1", 0)) / 2
)
)

tmp = {}
tmp[k] = {kk: vv for d in v for kk, vv in d.items()}

# print(tmp)

# `tmp` is now:
# {
#     2002: {"Name": "John", "M1": 87, "E1": 10, "Score": 90, "Grade": "A"},
#     2008: {"Name": "Paul", "M1": 83, "E1": 59, "Score": 77, "Grade": "C"},
# }

displayResult(tmp)
``````

Prints:

``````ID             Name           Grade
2002           John           48.5
2008           Paul           71.0
``````