0
平均重复的值,我有一个列表:转换列表,字典和蟒蛇
list = [(a,1),(b,2),(a,3)]
我想将其转换为一个字典,其中当有重复(如(a,1)
和(a,3)
),它将会得到平均值,所以字典将只有1个关键字:值对,在这种情况下,将会是a:2
。
平均重复的值,我有一个列表:转换列表,字典和蟒蛇
list = [(a,1),(b,2),(a,3)]
我想将其转换为一个字典,其中当有重复(如(a,1)
和(a,3)
),它将会得到平均值,所以字典将只有1个关键字:值对,在这种情况下,将会是a:2
。
from collections import defaultdict
l = [('a',1),('b',2),('a',3)]
d = defaultdict(list)
for pair in l:
d[pair[0]].append(pair[1]) #add each number in to the list with under the correct key
for (k,v) in d.items():
d[k] = sum(d[k])/len(d[k]) #re-assign the value associated with key k as the sum of the elements in the list divided by its length
所以
print(d)
>>> defaultdict(<type 'list'>, {'a': 2, 'b': 2})
甚至更好,生产中端普通词典:
from collections import defaultdict
l = [('a',1),('b',2),('a',3)]
temp_d = defaultdict(list)
for pair in l:
temp_d[pair[0]].append(pair[1])
#CHANGES HERE
final = dict((k,sum(v)/len(v)) for k,v in temp_d.items())
print(final)
>>>
{'a': 2, 'b': 2}
请注意,如果你正在使用2.x的(你是,你会需要调整下面的强制float分割):
(k,sum(v)/float(len(v)))
或
sum(d[k])/float(len(d[k]))
或者,只需在顶部添加'from __future__ import division'即可。 –
@BurhanKhalid好点,谢谢:) – HennyH
谢谢。我会试试看,因为实际列表比我的示例3元素列表长很多。让你知道它是如何去的 – gio888