2016-07-28 1 views
-3

각 키에 여러 값이있는 사전이 있습니다. 각 키에 마지막 7 개의 값만 포함하고 기본 산술 (예 : 더하기, 빼기, 곱하기, 나누기)을 수행 할 수 있습니까?파이썬 : 각 키의 마지막 7 개 값 포함

최종 목표는 날짜 관련 데이터를 업로드하고 지난 주, 월 또는 연도 만 포함 할 수있게하는 것입니다.

올바른 방향으로의 전환이 매우 중요합니다.

+2

예, 가능합니다 물론. 왜 실제로 * 무언가를 시도하지 않습니까? * – jonrsharpe

+1

"각 키는 여러 값을가집니다". 그것이 목록이라는 것을 의미합니까? 터플? 데이터 구조의 관련성이없는 부분에 대해서만 이야기하고 있습니다. 당신이 우리에게 아무 것도 말하지 않는 하나의 특정한 키의 값에 대해서만 묻기 때문에 당신이 여기있는 것은 중요하지 않습니다. –

답변

0

어떻게 각 키에 여러 값을 저장합니까? 목록을 사용하는 경우 목록의 마지막 X 요소를 참조하면됩니다. "키 1"에서 지난 7 개 요소에 대한

my_dict = {key1:[e_a1, e_a2, ... e_a9], key2:[e_b1, e_b2, ... e_b9]} 

은 당신이 할 필요가, my_dict[key1][-7:]로 참조된다

는 전체 사전을 유지하기 위해 필요 마지막 X 요소를 참조한다고 가정. 이 참조를 사용하면 [e_a3, ..., e_a9]의 목록을 제공합니다.

또한이 응답은 목록이 이미 작성일에 날짜순으로 정렬되었다고 가정합니다.

+0

왜 투표가 늦습니까? 이것은 OP가 제공 한 모든 정보입니다. –

+0

나는 downvote를하지 않았지만, 마지막 7 개의 값만 필요할 때 모든 데이터를 저장하면 키당 값이 7보다 훨씬 클 경우 주 메모리가 부 풀릴 수 있습니다. – ShadowRanger

+0

예, 물론 맞습니다. 이를 해결하는 확실한 방법은 큐 데이터 구조를 만드는 것입니다. 그러나 영업 담당자는 이전 데이터를 자르려고한다는 점을 명시 적으로 언급하지 않았습니다. 이것은 구현에 달려 있습니다. 그는 마지막 X 일, 몇 달 또는 몇 년을 동적으로 선택해야 할 수 있습니다. –

2

들어오는 데이터의 구성 방법에 따라 (이미 정렬 된 순서와 무작위 순서에 따라) collections.deque (최대 길이를 설정하여 새로 추가 된 항목이 지정된 항목에 도달하면 원활하게 이전 항목을 밀어 낼 수 있음) 제한)을 입력하거나 정렬되지 않은 입력의 경우 heapq module 프리미티브 (처음에는 heapq.heappush을 사용하고 용량이 도달하면 heappushpop으로 전환)로 솔루션을 롤링합니다.

기본 저장소 유형으로 두 가지 방법 중 하나를 사용하면 collections.defaultdict을 사용하면 코드가 단순 해집니다. 경계 deque

예 :

from collections import defaultdict, deque 

recentdata = defaultdict(lambda: deque(maxlen=7)) 
for k, v in mydata: 
    recentdata[k].append(v) # If deque already size 7, first entry added is bumped out 

또는 heapq와 :

from collections import defaultdict 
from heapq import heappush, heappushpop 

recentdata = defaultdict(list) 
for k, v in mydata: 
    kdata = recentdata[k] 
    if len(kdata) < 7: 
     heappush(kdata, v)  # Grow to max size maintaining heap invariant 
    else: 
     heappushpop(kdata, v) # Remain at max size, discarding smallest value (old or new) 
관련 문제