我有两个词典列表,我想根据键值找到每个词典的平均值。即我想匹配键并从词典列表中平均其值。
override func viewWillDisappear(animated: Bool) {
player?.pause()
super.viewWillDisappear(animated)
}
我想匹配词典列表中的键data = {'5649a533c95a8a0bc345d1fe': [{'1': 0.0}, {'2': 28652.343535112403}, {'3': 26505.012833437846}],
'5649a533c95a8a0bc345d20c': [{'1': 28652.343535112403}, {'2': 26505.012833437846}, {'3': 24518.570421292356}]}
,然后对其各自的值进行平均。
E.g在上面的数据集中,我需要获得与键匹配的值'1'
和0.0
,即' 1'然后做平均值。
预期结果为28652.343535112403
我能够迭代字典,但之后我就迷失了。
这是我试图做的事情
[{'1': 20000}, {'2': 230000}, {'3': 23000}]
请帮忙。
答案 0 :(得分:1)
尝试:
d = {}
for x in itertools.chain(data.values()):
for k,v in x.items():
if k in d:
d[k].append(v)
else:
d[k] = [v]
av = {}
for k,v in d.items():
av[k]=sum(v)/len(v)
print av
我得到了一个结果:
{'1': 14326.171767556201, '3': 25511.7916273651, '2': 27578.678184275122}
注意:根据您的数据值,您无法获得平均值:
[{'1': 20000}, {'2': 230000}, {'3': 23000}]
答案 1 :(得分:0)
另一种尝试可能是 -
d = []
for k, v in data.items():
dd = []
for index, i in enumerate(v, start=1):
dd.append((index, i[str(index)]))
d.append(dd)
av_1 = []
av_2 = []
for (x,y) in zip(d[0],d[1]):
l1 = (x[0],y[0])
l2= (x[01],y[1])
l1_av = reduce(lambda x, y: x + y, l1) / len(l1)
l2_av = reduce(lambda x, y: x + y, l2) / len(l2)
av_1.append(l1_av)
av_2.append(l2_av)
print {k:v for k,v in zip(av_1,av_2)}
输出
{1: 14326.171767556201, 2: 27578.678184275122, 3: 25511.7916273651}