我创建了一个名为'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”对象不可迭代。
有针对这种情况的解决方案吗?最好的问候。
答案 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)