저는 100000 개가 넘는 키로 구성된 거대한 그래프를 가지고있어서 효율성이 큰 문제입니다. 나는 모든 키의 가치를 통과하고, 모든 값을, 나는 ... 예 값이 나머지 값 인 또 다른 사전에서 키가되고 싶어요 .. 여기 파이썬 사전에서 값을 선택적으로 인쇄합니다.
graph = {'foobar': ['1', '2', '3']}
result = {'1' : ['2', '3'], '2' : ['1', '3'], '3' : ['1', '2']} #in no particular order
가에서 내 코드입니다 그 순간 ...
for i in heroDict.values():
for j in i:
if graph.has_key(j):
tempDict = copy.deepcopy(i)
tempDict.remove(j)
heroList = tempDict
graph[j] += heroList
else:
tempDict = copy.deepcopy(i)
tempDict.remove(j)
heroList = tempDict
graph[j] = heroList
return graph
'heroDict'는 매우 큰 것을 제외하고는 예제와 비슷한 사전입니다.
문제는 내가 수행하고있는 deepcopy() 때문에 코드가 매우 느리게 실행되고 있다는 것입니다. 예를 들어 foobar 예제에서는 키로 '1'을 얻습니다. 나는 '[1],'2 ','3 ']을 일시적인 dict에 복사하므로 변경된 내용은 내가 반환 한 최종 사전에 영향을 미치지 않습니다. 그런 다음 [1, 2, 3]에서 키를 제거하고 '1'키를 할당합니다. 그래서 저는 {1 ': ['2 ','3 ']}로 남았습니다. 그것은 제가 원했던 것이지만 100000 번 반복하기 때문에 너무 오래 걸립니다.
내 마지막 질문은 어떤 방식 으로든이를 개선하여 더 빨리 실행할 수 있습니까?
도움을 주시면 대단히 감사하겠습니다.
얼마나 많은 RAM이 있습니까? 제가 이해한다면 99999 가지 요소의 100000 목록을보고 있습니다. 10Giga 객체는 많은 RAM을 필요로합니다. –
두 번째'dict'을 메모리에 실제로 만들 필요가 있습니까? 필요시 값을 계산하는 것이 더 쉽고 효율적이지는 않은 것 같습니다. 당신은 그것을 무엇을 위해 사용합니까? –
두 번째 dict 작성은 필자가 구현 한 방법 일뿐입니다. 천천히 만드는거야. 나는 지금 얻고있는 동일한 결과를 얻는 또 다른 방법을 생각할 수는 없지만 더 빨리. – Ogen