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

时间:2014-03-19 17:37:37

标签: python function dictionary key-value median

我需要找到与每个键相关的所有整数的中位数(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”将完全重构数据。我已经考虑过“从统计导入中位数”,但我再一次不知道如何只选择与每个相同键相关联的值。

提前致谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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()]