2015-07-03 47 views
-1

我有這樣的元組的列表:集團和計算的元組的列表中的平均

x=[('HSBC8999', 4, 179447), ('HSBC1199', 81, 864108), ('HSBC1199', 32, 715121),('HSBC8999', 4, 1447),('HSBC1199', 32, 61521) ] 

我想執行一些任務:根據第1項

  1. 組列表:HSBCXXXX

  2. 在每組中,計算具有相同第二項目的第三項目的平均值。

是這樣的: 組1:

('HSBC8999', 4, 179447) 
('HSBC8999', 4, 1447) 

平均爲4:(179447 + 1447)/ 2

組2:

('HSBC1199', 81, 864108) 
('HSBC1199', 32, 715121) 
('HSBC1199', 32, 61521) 

平均81 :864108

32的平均值=(715121 + 61521)/ 2

+0

https://docs.python.org/3/library/operator.html#operator.itemgetter和https://docs.python.org/ 3/library/itertools.html#itertools.groupby可能會有所幫助。 – wwii

+0

請首先閱讀http://stackoverflow.com/help/how-to-ask –

回答

2
import itertools 
import operator 

L = [('HSBC8999', 4, 179447), ('HSBC1199', 81, 864108), ('HSBC1199', 32, 715121),('HSBC8999', 4, 1447),('HSBC1199', 32, 61521) ] 

L.sort(key=operator.itemgetter(0)) 
for _k, stackoverflow in itertools.groupby(L, operator.itemgetter(0)): 
    subl = list(stackoverflow) 
    subl.sort(key=operator.itemgetter(1)) 
    for k, subg in itertools.groupby(subl, operator.itemgetter(1)): 
     subs = list(subg) 
     print("the average of {} is {}".format(k, sum(s[2] for s in subs)/len(subs))) 
+1

非常感謝!這個對我有用。欣賞! – Estelle