2017-02-20 4 views
3

저는 파이썬과 프로그래밍에있어 매우 새롭고 문제를 이해하기 위해 애 쓰고 있습니다. 어떤 도움이라도 대단히 감사합니다. 내가 부문별로 각 값의 평균을 인쇄 할 사전을 사용하려고Python : 값을 나누고 범주별로 평균을 찾는 방법

deque([(3000.0, category1), (6000.0, category1), (8000.0, category2), (3000.0, category3), (7000.0, category3), (4500.0, category3)]) 

:

나는 가치와 범주의 양단이있다. 예를 들어 category1 = (3000 + 6000)/2; category2 = 8000/1; category3 = (3000 + 7000 + 4500)/3

이 작업을 수행하는 간단한 방법이 있습니까? 지금까지 내 유일한 생각은 독특한 범주 목록 작성하는 것입니다 :

catetory_list = [] 
for i in deque: 
    if i[1] not in category_list: 
    category_list.append(i[1]) 

내가 여기에 중요한 뭔가를 놓치고 생각을하지만, 다음 단계를 찾을 수 없습니다.

이미 비슷한 질문이 여기에 있는데, 즉 herehere이 있지만 내 질문에 맞게 만드는 방법에 어려움을 겪고 있습니다.

+0

에 오신 것을 환영합니다 verflow! 먼저 [둘러보기] (http://stackoverflow.com/tour)를 열고 [어떻게 좋은 질문을하는 법] (http://stackoverflow.com/help/how-to-ask)을 배우고 [ Minimal, Complete, Verifiable] (http://stackoverflow.com/help/mcve) 예제를 참조하십시오. 그렇게하면 우리가 당신을 도울 수 있습니다. –

+0

@StephenRauch 좋아, 내 질문이 아주 분명하지 않은 것처럼 들리 네. 나는 정말로 노력하고 있었다. :(분명히하기 위해 내 게시물을 수정하려고합니다.) – Nat

+1

참조 : http://stackoverflow.com/q/42309909/7484636 – KernelPanic

답변

3

당신이 가까웠다면, 당신은 dict을 값과 함께 구성해야한다고 생각합니다. 그리고 나중에 값을 평균 :

샘플 데이터 :

my_dq = deque([ 
    (3000.0, 'category1'), (6000.0, 'category1'), (8000.0, 'category2'), 
    (3000.0, 'category3'), (7000.0, 'category3'), (4500.0, 'category3')]) 

코드 :

categories = {} 
for i in my_dq: 
    categories.setdefault(i[1], []).append(i[0]) 
categories = {k: sum(v)/len(v) for k, v in categories.items()} 

결과 : 스택 O에

{'category1': 4500.0, 'category3': 4833.3333, 'category2': 8000.0} 
+0

... 분명히 최적화하여 값을 합산하고 총 수를 유지하십시오. (가치가 있을지도 모르겠다) – csl

+0

@csl 네, 예상되는 목록의 길이에 달려 있습니다 ... –

관련 문제