计算列表中字典值的中值
Calculate median of dictionary values inside list
我想计算列表中"score"(字典值)的中值。
my_dict = {"John": [{"class": "math", "score": 100, "year": 2014}, {"class": "english", "score": 85, "year": 2015}, {"class": "science", "score": 90, "year": 2015}],
"Timmy": [{"class": "math", "score": 87, "year": 2014}, {"class": "english", "score": 91, "year": 2015}],
"Sally":[{"class": "math", "score": 95, "year": 2014}]}
输出如下:
new_dict = {"John": 90, "Timmy": 89, "Sally": 95}
我想我需要根据得分对 my_dict 进行排序,然后计算中值。如果不使用外部包装,就无法完全弄清楚任何一步。
如有任何帮助,我们将不胜感激! Python.
的新手
my_dict = {"John": [{"class": "math", "score": 100, "year": 2014}, {"class": "english", "score": 85, "year": 2015}, {"class": "science", "score": 90, "year": 2015}],
"Timmy": [{"class": "math", "score": 87, "year": 2014}, {"class": "english", "score": 91, "year": 2015}],
"Sally":[{"class": "math", "score": 95, "year": 2014}]}
import numpy as np
medians = {}
for k in my_dict.keys():
ls = []
for d in my_dict[k]:
ls.append(d['score'])
medians[k] = np.median(ls)
print(medians)
输出:
{'Sally': 95.0, 'Timmy': 89.0, 'John': 90.0}
您可以只使用 numpy.median 来计算中位数。
您可以使用 statistics 的中位数。
from statistics import median
my_dict = {"John": [{"class": "math", "score": 100, "year": 2014}, {"class": "english", "score": 85, "year": 2015}, {"class": "science", "score": 90, "year": 2015}],
"Timmy": [{"class": "math", "score": 87, "year": 2014}, {"class": "english", "score": 91, "year": 2015}],
"Sally":[{"class": "math", "score": 95, "year": 2014}]}
new_dict = {}
for k, v in my_dict.items():
m = []
for l in v:
m.append(l["score"])
new_dict[k] = median(m)
print(new_dict)
如果你不想使用包而自己写函数,你可以这样调用:
def median(lst):
n = len(lst)
s = sorted(lst)
return (sum(s[n//2-1:n//2+1])/2.0, s[n//2])[n % 2] if n else None
使用 median 和听写理解
的一行
from statistics import median
{k:median([v.get('score',0) for v in my_dict[k]]) for k in my_dict.keys()}
输出:
{'John': 90, 'Timmy': 89.0, 'Sally': 95}
我想计算列表中"score"(字典值)的中值。
my_dict = {"John": [{"class": "math", "score": 100, "year": 2014}, {"class": "english", "score": 85, "year": 2015}, {"class": "science", "score": 90, "year": 2015}],
"Timmy": [{"class": "math", "score": 87, "year": 2014}, {"class": "english", "score": 91, "year": 2015}],
"Sally":[{"class": "math", "score": 95, "year": 2014}]}
输出如下:
new_dict = {"John": 90, "Timmy": 89, "Sally": 95}
我想我需要根据得分对 my_dict 进行排序,然后计算中值。如果不使用外部包装,就无法完全弄清楚任何一步。
如有任何帮助,我们将不胜感激! Python.
的新手my_dict = {"John": [{"class": "math", "score": 100, "year": 2014}, {"class": "english", "score": 85, "year": 2015}, {"class": "science", "score": 90, "year": 2015}],
"Timmy": [{"class": "math", "score": 87, "year": 2014}, {"class": "english", "score": 91, "year": 2015}],
"Sally":[{"class": "math", "score": 95, "year": 2014}]}
import numpy as np
medians = {}
for k in my_dict.keys():
ls = []
for d in my_dict[k]:
ls.append(d['score'])
medians[k] = np.median(ls)
print(medians)
输出:
{'Sally': 95.0, 'Timmy': 89.0, 'John': 90.0}
您可以只使用 numpy.median 来计算中位数。
您可以使用 statistics 的中位数。
from statistics import median
my_dict = {"John": [{"class": "math", "score": 100, "year": 2014}, {"class": "english", "score": 85, "year": 2015}, {"class": "science", "score": 90, "year": 2015}],
"Timmy": [{"class": "math", "score": 87, "year": 2014}, {"class": "english", "score": 91, "year": 2015}],
"Sally":[{"class": "math", "score": 95, "year": 2014}]}
new_dict = {}
for k, v in my_dict.items():
m = []
for l in v:
m.append(l["score"])
new_dict[k] = median(m)
print(new_dict)
如果你不想使用包而自己写函数,你可以这样调用:
def median(lst):
n = len(lst)
s = sorted(lst)
return (sum(s[n//2-1:n//2+1])/2.0, s[n//2])[n % 2] if n else None
使用 median 和听写理解
的一行from statistics import median
{k:median([v.get('score',0) for v in my_dict[k]]) for k in my_dict.keys()}
输出:
{'John': 90, 'Timmy': 89.0, 'Sally': 95}