2012-12-13 132 views
0

我有一個字典:執行計算值

adict = {'key1':{'t1':{'thedec':.078, 'theint':1000, 'thechar':100}, 
          't2':{'thedec':.0645, 'theint':10, 'thechar':5}, 
          't3':{'thedec':.0871, 'theint':250, 'thechar':45}, 
          't4':{'thedec':.0842, 'theint':200, 'thechar':37}, 
          't5':{'thedec':.054, 'theint':409, 'thechar':82}, 
          't6':{'thedec':.055, 'theint':350, 'thechar':60}}} 

我使用下面的循環,這樣我可以在載體配對「的INT」的值,以便最終我可以輕鬆地使用對其執行統計計算:

for k1 in adict: 
    x = [] 
    for t, record in sorted(adict[k1].items(), key = lambda(k,v):v['thedec']): 
     x.append(record['theint']) 
    y = [0]*(len(x)/2) 
    for i in xrange(0,len(x),2): 
     y[i/2] = sum(x[i:i+2]) 

我想知道如果: 1.有更快的方法來提取的「的INT」的值使用比.append() 2.是我可以採取一種方法,例如所有「的INT」的平均值 3.有一種方法,我可以通過兩個的字典循環,使我能以某種方式跳過第一複印工序 所有的值,並馬上去把它們添加到一個向量作爲總結對。

感謝您的幫助。

回答

3
>>> [x['theint'] + y['theint'] for x, y in zip(*[iter(sorted(adict['key1'].values(), key=operator.itemgetter('thedec')))] * 2)] 
[759, 1010, 450] 
+0

方面!!!!!!!!! – Nikos

+0

@ignacio巴斯克斯 - 艾布拉姆斯,感謝。我試圖把它分開。我真的不明白是什麼[iterator_object]手段。我們如何在一個迭代器對象上使用zip?我明白這個代碼的作用,但不是如何。謹慎解釋? – cdelsola

+1

@ user1816858:http://stackoverflow.com/q/2233204/20862 –