在字典中查找列表的平均值

时间:2020-05-09 16:20:05

标签: python python-3.x list dictionary

我创建了一个名为'alt_dict'的字典,我希望在其中将各个列表中的值取平均值。

import statistics
datas = [['CC',      1,     0,     0,      0,    2.5],
         ['CC',      1,   4.5,     0,    4.5,    2.8],
         ['CC',      1,   9.5,     0,    9.5,    2.5],
         ['CC',      2,     0,   2.5,      0,      5],
         ['CC',      2,   4.5,   2.8,    4.5,      5],
         ['CC',      2,   9.5,   2.5,    9.5,      5],
         ['CC',      3,     0,     5,      0,    7.5],
         ['CC',      3,   4.5,     5,    4.5,    7.2],
         ['CC',      3,   9.5,     5,    9.5,    7.9]]
cc_list = []
alt_dict = {}

for i in range(len(datas)):
    if datas[i][0] == 'CC':
        cc_list.append(datas[i][1])
cc_list_plane = list(set(cc_list))

for y in cc_list_plane:
    alt_dict[y] = []

for i in range(len(datas)):
    if datas[i][0] == 'CC':
        key = datas[i][1]
        alt_dict[key].extend([datas[i][5]-datas[i][3]])
#        alt_dict[key].extend([statistics.mean(datas[i][5]-datas[i][3])])
print(alt_dict)

我正在寻找以下内容:

{1: [2.6], 2: [2.4], 3: [2.5333]}

我尝试将'statistics'库及其'mean'函数一起使用,但是出现TypeError:“ float”对象不可迭代。

有针对这种情况的解决方案吗?最好的问候。

2 个答案:

答案 0 :(得分:1)

尝试一下:

res = {k: [sum(v)/len(v)] for k, v in alt_dict.items()}

输出:

{1: [2.6], 2: [2.4], 3: [2.5333333333333337]}

使用statistics.mean()

res = {k: [statistics.mean(v)] for k, v in alt_dict.items()}
#{1: [2.6], 2: [2.4], 3: [2.5333333333333337]}

答案 1 :(得分:1)

  • 当前的实现效率低下,因为它需要在datas上进行多次迭代来创建键并填充alt_dict,还需要进行一次迭代来创建alt_dict
  • 以下实现通过一个循环完成所有操作,并返回所需的输出。
    • 依靠.get()检查密钥是否存在
from statistics import mean

alt_dict = dict()
for v in datas:
    if v[0] == 'CC':
        value = [v[5] - v[3]]
        if alt_dict.get(v[1]) == None:
            alt_dict[v[1]] = value
        else:
            alt_dict[v[1]].extend(value)

alt_dict = {k: mean(v) for k, v in alt_dict.items()}

print(alt_dict)

>>> {1: 2.6, 2: 2.4, 3: 2.5333333333333337}

作为功能:

def list_calcs(data: list, key: str, col1: int, col2: int) -> dict:
    """
    data: list of lists
    key: str of interest in data[0][0] -> 'CC'
    col1: data[0][col1]
    col2: data[0][col2]
    data[0][col1] - data[0][col2]
    """
    alt_dict = dict()
    for v in data:
        if v[0] == key:
            value = [v[col1] - v[col2]]
            if alt_dict.get(v[1]) == None:
                alt_dict[v[1]] = value
            else:
                alt_dict[v[1]].extend(value)

    return {k: mean(v) for k, v in alt_dict.items()}

alt_dict = list_calcs(datas, 'CC', 5, 3)
相关问题