2016-03-14 71 views
0

我已经字典的以下列表:平均的列表的第i个位置的元素的在字典蟒

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,...} 
+3

[查找列表的平均(的可能的复制http://stackoverflow.com/questions/9039961相对较新的/找到一个平均值的列表) – Trey50Daniel

+0

@ Trey50Daniel我认为这两个问题听起来都一样。 –

+0

是的,我认为是。这就是把我抛弃的原因。 – Trey50Daniel

回答

2

使用 “总和” 的方法。 给定字典“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个元素的平均

+0

请问您可以添加更多描述? –

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.