我有以下词典列表:
clusters=[{'A': [1.0, 1.0]}, {'C': [4.0, 4.0], 'D': [4.0, 5.0], 'B': [2.0, 1.0]}]
我已经编写了一段代码,可以从列表中一次访问一个字典:
for index, value in enumerate(clusters):
for key in value:
这样我就可以得到以下词典;
{'A': [1.0, 1.0]}
{'C': [4.0, 4.0], 'D': [4.0, 5.0], 'B': [2.0, 1.0]}
我要做的是找到字典中列表值的ith
元素的平均值。
例如:在第二个字典中;
x-position-average = (4.0+4.0+2.0)/3
然后将该值分配给字典:
new_centroid = {"X": x-position-average,"Y": y-position-average,...}
答案 0 :(得分:2)
使用“sum”方法。 给出字典“D”:
def average(D, i):
# key iterates over all keys in the dictionary.
# D[key][i] is the ith element of the list whose key is "key"
return sum(D[key][i] for key in D)/len(D)
这将返回D中每个列表的第i个元素的平均值。
答案 1 :(得分:1)
如果您有维度n
中的点字典,则以下函数将其质心作为元组返回:
def centroid(d,n):
return tuple(statistics.mean(d[k][i] for k in d) for i in range(n))
例如,如果
cluster = {'C': [4.0, 4.0], 'D': [4.0, 5.0], 'B': [2.0, 1.0]}
然后
>>> centroid(cluster,2)
(3.3333333333333335, 3.3333333333333335)
这使用statistics模块,这在Python 3中相对较新。