파이썬에서 사전에 비슷한 형식으로 데이터를 저장하고 싶습니다. {1:'a', 2:'b'}
. 모든 값은 다른 값 중에서뿐만 아니라 키 사이에서도 고유합니다.파이썬에 대한 리버 서블 사전
'키'또는 '값'을 사용하여 질문하는 경우에도 해당 객체를 가져올 수있는 간단한 데이터 구조가 있습니까? 예를 들어
>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a['b']
2
>>> a[3]
KeyError
'키는'표준 파이썬의 int가있다 값은 (< 256char) 문자열 짧다.
내가 원래 사전에서 결과를 찾을 수없는 경우 반전 된 사전을 만들고 그것을 검색하는 내 현재 솔루션 :이 두 배의 공간을 사용
pointsreversed = dict((v, k) for k, v in points.iteritems())
def lookup(key):
return points.get(key) or pointsreversed.key()
, 잘되지 않습니다 (내 사전 수 백 메가까지 가능) 평균적으로 50 % 더 느립니다.
EDIT : 몇 개의 답변에서 언급했듯이 두 개의 dict은 중복 된 항목이 아닌 사전 만 사용하므로 메모리 사용량을 두 배로 늘리지는 않습니다.
해결 방법이 있습니까?
예를 들어 실제로 [1]이 (가) '1'을 반환합니까? 당신이 'a'를 돌려주기를 원하는 것처럼 보입니다. –
죄송합니다, 고정 감사 –
(0) pointsreversed.key() ??? - 실제 작업 코드를 복사/붙여 넣으십시오. (1) 평균 조회 수는 N * (2-p) 여야합니다. 여기서 p = prob (첫 번째 dict에 있음). "50 % 느림"은 p가 작거나 오버 헤드를 도입했음을 의미합니다. (2) 특별한 작업을 수행하지 않으면 문자열이 복제되지 않으므로 메모리 사용량이 배가되지 않습니다. (3) int 객체인지 str 객체인지 여부를 어떻게 알 수 있습니까? –