각 키에 여러 값이있는 사전이 있습니다. 각 키에 마지막 7 개의 값만 포함하고 기본 산술 (예 : 더하기, 빼기, 곱하기, 나누기)을 수행 할 수 있습니까?파이썬 : 각 키의 마지막 7 개 값 포함
최종 목표는 날짜 관련 데이터를 업로드하고 지난 주, 월 또는 연도 만 포함 할 수있게하는 것입니다.
올바른 방향으로의 전환이 매우 중요합니다.
각 키에 여러 값이있는 사전이 있습니다. 각 키에 마지막 7 개의 값만 포함하고 기본 산술 (예 : 더하기, 빼기, 곱하기, 나누기)을 수행 할 수 있습니까?파이썬 : 각 키의 마지막 7 개 값 포함
최종 목표는 날짜 관련 데이터를 업로드하고 지난 주, 월 또는 연도 만 포함 할 수있게하는 것입니다.
올바른 방향으로의 전환이 매우 중요합니다.
어떻게 각 키에 여러 값을 저장합니까? 목록을 사용하는 경우 목록의 마지막 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]
의 목록을 제공합니다.
또한이 응답은 목록이 이미 작성일에 날짜순으로 정렬되었다고 가정합니다.
왜 투표가 늦습니까? 이것은 OP가 제공 한 모든 정보입니다. –
나는 downvote를하지 않았지만, 마지막 7 개의 값만 필요할 때 모든 데이터를 저장하면 키당 값이 7보다 훨씬 클 경우 주 메모리가 부 풀릴 수 있습니다. – ShadowRanger
예, 물론 맞습니다. 이를 해결하는 확실한 방법은 큐 데이터 구조를 만드는 것입니다. 그러나 영업 담당자는 이전 데이터를 자르려고한다는 점을 명시 적으로 언급하지 않았습니다. 이것은 구현에 달려 있습니다. 그는 마지막 X 일, 몇 달 또는 몇 년을 동적으로 선택해야 할 수 있습니다. –
들어오는 데이터의 구성 방법에 따라 (이미 정렬 된 순서와 무작위 순서에 따라) 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)
예, 가능합니다 물론. 왜 실제로 * 무언가를 시도하지 않습니까? * – jonrsharpe
"각 키는 여러 값을가집니다". 그것이 목록이라는 것을 의미합니까? 터플? 데이터 구조의 관련성이없는 부분에 대해서만 이야기하고 있습니다. 당신이 우리에게 아무 것도 말하지 않는 하나의 특정한 키의 값에 대해서만 묻기 때문에 당신이 여기있는 것은 중요하지 않습니다. –