2015-01-04 3 views
0

실제 이름으로 사전에 저장하는 (city_name, city_code)와 비슷한 여러 개의 튜플 목록이 있으므로 city_name을 쉽게 city_code에 매핑 할 수 있습니다. 분명히 도시 이름과 코드는 고유합니다.Python - 고유 한 값을 사용하여 사전으로 작업하기

도시 이름을 기반으로 도시 코드를 쉽게 검색 할 수 있지만 때로는 사전 중에서 선형 검색을 수행하는 코드에서 도시 이름을 가져 오는 것과 같이 다른 방식으로 수행 할 수 있기를 원합니다. 꽤 서투른 항목.

for c in cities.items(): 
      if c[1] == code: 
       name = c[0] 
       break 

더 좋은 방법이 있나요? 나는 파이썬 2.7.8을 사용하고 있는데,이 모듈을 추가 모듈없이 간단하게 만들고 싶습니다.

+0

역방향 조회가 자주 발생하면 역방향 사전을 유지하는 것이 좋습니다. 역방향 조회가 시간 결정적이지 않으면 검사가 정상입니다. – 9000

+0

http://stackoverflow.com/questions/8023306/get-key-by-value-in-dictionary –

+0

@ John1024 : 오류를 찾아 주셔서 감사합니다. 나는 잘못된 dup-target으로 망치를 쳤다. (나는 많은 질문을했고, 잘못된 URL을 복사했다.) 지금 고치세요. 보고서 – inspectorG4dget

답변

0

역 사전을 쉽게 만들 수 있습니다. 키와 값을 생성 할 수 있습니다 반전

In [9]: d 
Out[9]: {'LA': 11, 'NO': 12, 'NYC': 10, 'SF': 13} 

사전 적 : 우리가 사전 d가 있다고 가정

In [10]: reverse_d = dict((v, k) for k, v in d.items()) 

In [11]: reverse_d 
Out[11]: {10: 'NYC', 11: 'LA', 12: 'NO', 13: 'SF'} 
0

당신이 양방향 사전을 만들고 싶어처럼 당신은 소리 :

class Bidict: 
    def __init__(self): 
     self.data = {} 
     self.reverse = {} 
    def __setitem__(self, k, v): 
     self.data[k] = v 
     self.reverse[v] = k 
    def __getitem__(self,k): 
     return self.data[k] 
    def getKey(self, v): 
     return self.reverse[v] 

을 출력 :

In [119]: bd = Bidict() 

In [120]: bd[1] = 'a' 

In [121]: bd 
Out[121]: <__main__.Bidict at 0x10b0b8be0> 

In [122]: bd.data 
Out[122]: {1: 'a'} 

In [123]: bd.reverse 
Out[123]: {'a': 1} 

In [124]: bd[1] 
Out[124]: 'a' 

In [125]: bd.getKey['a'] 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-125-59e1828d8af1> in <module>() 
----> 1 bd.getKey['a'] 

TypeError: 'method' object is not subscriptable 

In [126]: bd.getKey('a') 
Out[126]: 1 
관련 문제