2014-10-29 5 views
0

나는리스트 목록으로 그룹화하려고합니다. 이 목록은 다음과 주어진다장소 이름을 파이썬으로 그룹화하십시오.

{'San Antonio,TX': [[-50,98],2, 3]} 

보다 정밀 출력의 내부에서의 첫번째 요소는 2 개 첫번째 원소 중 하나를 할 필요

[[[-50,98],1,2,'San Antonio,TX'],[[-52,99],3,4,'San Antonio,TX']] 

I 기대하고 출력은 아래에 주어진다 . 출력의 내부 목록의 두 번째 요소는 입력의 내부 목록에있는 두 번째 요소의 평균입니다. 출력에서 내부 목록의 세 번째 요소는 입력의 내부 목록에있는 세 번째 요소의 평균입니다.

이것은 실제로 문제의 작은 버전입니다. 내가 가지고있는 목록의 초기 목록은 1000 개 이상의 목록을 가지고있을 것입니다.

감사

test.py의
+0

은 평균 int로 절단, 또는 수레 있습니까? –

+0

평균이 잘 렸습니다. 여기를 이해하기 쉽게 int를 입력하십시오 –

답변

0

내용

from itertools import groupby 
from operator import itemgetter 


def aggregate(data): 
    result = [] 
    data = sorted(data, key=itemgetter(3)) 
    for k, g in groupby(data, itemgetter(3)): 
     g = list(g) 
     n = len(g) # Cast to float if you want average to be float in python 2 
     x1 = g[0][0] 
     x2 = sum(x[1] for x in g) 
     x3 = sum(x[2] for x in g) 
     d = {k: [x1, x2/n, x3/n]} # This is what you want for each group 
     result.append(d) 

    return result 


def main(): 
    data = [[[-50,98], 1, 2, 'San Antonio,TX'], 
      [[-52,99], 3, 4, 'San Antonio,TX']] 
    result = aggregate(data) 
    print(result) 

if __name__ == '__main__': 
    main() 

는 결과 :

In [12]: run test.py 
[{'San Antonio,TX': [[-50, 98], 2, 3]}] 
+0

고마워요 .. 도와주세요 –

+0

@ YEDURAGBABU이 답이 정확하면 숫자 아래의 "틱"을 클릭하여 대답으로 표시하는 것이 좋습니다 왼쪽 여백, 또는 그것을 upvoting. – lightalchemist

관련 문제