2013-02-18 3 views
1

I는 (목록)는 방법 defaultdict의 키에 따른 값을 누적

d =defaultdict(list) 
such as 1: 0 
     1:0.2 
     1: 0.3 
     2: 0.2 
     2: 0.4 
     2: 0.1 

...... I 유사한 defaultdict로 변환하는 방법 (목록) 중시하는 defaultdict이 있으면 같은 키를 사용하여 1 DICT 값의 축적은,하지만 난 단지 지금까지 코드를 다음 한 결코 큰 일

 1: 0 
     1: 0.2 
     1: 0.5 
     2: 0.2 
     2: 0.6 
     2: 0.7 
     ..... 

보다, 꽤 잘 :-(

d2 = defaultdict(list) 
for k in d.iterkeys() 
      v +=d(k) 
      d2[k]. append(v) 
아니다
+0

Defaultdict는 모호한 키를 허용합니까? 'd [1]'을 호출하면 무엇이 생성됩니까? 0, 0.2 또는 0.3? – Hyperboreus

답변

1

원래 게시물은 다소 혼란 스럽습니다. 예제는 목록의 사전보다는 멀티 맵처럼 보입니다.

나는 당신이 숫자 목록과 함께 defaultdict를 가지고 있다고 가정하고 각 목록의 값들의 누적 합계를 포함하는 새로운 defaultdict를 만들고 싶습니다. 이것을 시도하십시오 :

d2 = defaultdict(list) 
for k, v in d.iteritems(): 
    sum = 0.0 
    v2 = [] 
    for x in v: 
     sum += x 
     v2.append(sum) 
    d2[k] = v2 

새 defaultdict는 새 값을 추가 할 때 누적 합계를 자동 계산하지 않습니다.

numpy와 같은 라이브러리가 설치된 경우 파이썬 루프를 사용하여 누적 합계를 계산하는 대신 numpy.cumsum을 사용할 수 있습니다.

"정확히 1보다 크지 않다"라는 것이 정확히 무엇인지 분명하지 않습니다. 누적 합계가 1에 도달 한 후에 요소를 무시 하시겠습니까? 1보다 큰 개별 값을 무시하고 합계가 1을 초과하더라도 더 작은 값을 누적 하시겠습니까? 각 출력 목록에 같은 수의 요소를 갖고 싶지만 요소 값을 1로 제한 하시겠습니까?

+0

고맙습니다. 매우 도움이됩니다. – user1830108

+0

데이터 집합에 누적 값이 1보다 커야하지 않습니다. 이전 데이터 생성 과정에서 2 차 검사가 될 것입니다. 그러나이 특정 질문과 관련이 없습니다. numpy.cumsum은 좋은 아이디어 일 수 있습니다 :-) – user1830108