需要创建一个从字典中提取中位数的函数

1 投票
2 回答
565 浏览
提问于 2025-04-17 23:00

我需要找出与每个键(AA、BB)相关的所有整数的中位数。我的代码大致是这个格式:

AA - 21
AA - 52
BB - 3
BB - 2

我的代码:

def scoreData(filename):
   d = dict() 
   fin = open(filename) 
   contents = fin.readlines()
   for line in contents:
       parts = linesplit() 
       part[i] = int(part[1]) 
       if parts[0] not in d:
           d[parts[0]] = list(parts[1])  
       else:
           d[parts[0]].append(parts[1]) 
   names = list(d.keys()) 
   names.sort() #alphabeticez the names
   print("Name\+Max\+Min\+Median")
   for name in names: #makes the table
       print (name"\+", max(d[name]),\+min(d[name]),"\+"median(d[name]))

我担心按照“names”和“names.sort”的格式会完全改变数据的结构。我考虑过使用“from statistics import median”,但我还是不知道怎么只选择与每个相同键相关的值。

提前谢谢你们!

2 个回答

0

有很多,很多 方法可以解决这个问题。不过这里有一个“简单粗暴”的实现方式,可以完成这个任务。

假设你的数据是这样的:

AA  1
BB  5
AA  2
CC  7
BB  1

你可以这样做:

import numpy as np
from collections import defaultdict

def find_averages(input_file)
    result_dict = defaultdict(list)
    for line in input_file.readlines()
        key, value = line.split()
        result_dict[key].append[int(value)]

    return [(key, np.mean(value)) for key,value in result_dict.iteritems()]
1

你可以很简单地使用 pandasnumpy 来实现:

import pandas
import numpy as np

然后通过第一行进行汇总:

score = pandas.read_csv(filename, delimiter=' - ', header=None)
print score.groupby(0).agg([np.median, np.min, np.max])

这将返回:

         1
    median  amin  amax
0
AA    36.5    21    52
BB     2.5     2     3

撰写回答