2012-06-26 2 views
1

그래야 할 것처럼 보입니다 ...튜플을 파이썬에서 사전 키로 사용하기위한 단점?

지금 당장은 부정적인 영향없이 다차원으로 다차원 적으로 해시 할 수있는 마법처럼 보입니다.

+4

인생은 참으로 위대함을 느낄 수 있습니다. –

+0

@SimeonVisser 언제나 내가보기에는 매우 어려운 문제가있을 때마다 이것이 갑자기 마법의 해결책으로 밝혀졌습니다. – jab

답변

4

사전의 관점에서 볼 때 다차원적인 것은 하나도 없습니다. 사전은 n 스페이스를 설명하는 것으로 키를 해석하고 있다는 것을 알지 못합니다.

예를 들어, 덜 마법처럼 보일 수도 있고, 복잡해 지거나 기능적으로 동등한 문자열로 벡터를 영리하게 포장 할 수 있습니다. 인터프리터에 관한 한 파이썬 문자열은 또 다른 불변의 순서이다.

부정적인 영향은 없습니다.

일부 작업은 대체 구현보다 효율적이지 않을 수 있습니다. 예를 들어 (x, y, z) 좌표를 키로 사용하는 경우 z에있는 모든 점을 찾는 것은 실제 다차원 저장소에 비해 많은 시간이 소요됩니다. 그러나 때로는 선명도와 구현의 용이성 및 독서의 효율성이 높은 상점.

+0

기본'(x, y, z) keyed dict의 설정을 저장 한 채로 언제든지 추가 인덱싱 체계를 고안하여 필요한 다른 작업의 속도를 높일 수 있습니다. ;) –

2

유일한 단점은 성능입니다. 키가 클수록 해시 시간이 길어집니다.

간단히 말해서 파이썬 dict에있는 유일한 요구 사항은 불변이고 해시 가능하다는 것입니다. 튜플 (immutable)의 경우 이것은 하위 객체의 해시를 결합해야한다는 것을 의미합니다 (그 자체는 변경 가능하고 해시 가능해야 함). 또한 frozenset을 키로 사용할 수 있습니다. 목록이나 dicts 또는 세트를 키로 사용할 수 없습니다.

+0

나는 tictle-of-3-integer 대 plain integer 키를 사용하여 dict insert와 lookup을 비교하는 빠르고 더러운 벤치 마크를 시도했다. 튜플은 삽입시 약 13 %의 시간이 더 걸리고 조회에서 16 % 더 많은 시간이 소요됩니다. 그것은 튜플 키 자체를 생성하는 시간을 계산하지 않습니다. 테스트를위한 키 목록을 미리 작성했습니다. 그래서 그것은 큰 차이가 아니라 큰 차이를 만들어냅니다. –

관련 문제