2012-08-22 5 views
0

이 코드는 중복 코드라고 생각하지 않지만 내 검색에 올바른 용어를 사용하지 않았을 수 있습니다. 이 경우 사과드립니다.튜플을 사용하여 파이썬에서 키를 사용하여 간단한 사전을 작성하는 방법

내가 가지고있는 튜플 (사용자 정의 객체, 문자열)을 float에 매핑하는 사전입니다. 정확히 말하자면 2-tuple입니다. 내가 뭘 하려는지는 커스텀 객체와 일치하는 사전의 모든 엔트리 표현을 되 찾는 것입니다.

예 : CO1 및 이산화탄소가 두 가지 사용자 정의 객체를 표현 해야하는

mydict[(co1, 'hello')] = 0.01 
mydict[(co2, 'bye')] = 0.02 

. 키 (key) 인 튜플 (tuple)에 co1 (논리 논리적으로 동일한)을 포함하는 모든 항목을 찾고 싶습니다.

그럼 내 질문은 문자열이 고유 (일치하지 않는) 튜플 인 경우이 2_tuple => float 사전을 string => float 사전으로 줄이는 방법입니다.

for custom in custom_object: 
    for k, v in mydict.iteritems(): 
     if custom in k: 
      #store this particular entry into another data structure or otherwise process 
+0

:]을 즐길 수 무엇 값으로 터플을 연결하는 알고리즘? - 그건 자의적입니까? – user1438003

+0

@ user1438003 - 데이터 기반입니다. 일부 테스트 문서에서 함께 발생하는 단어와 개체의 조합에 점수를 매기고 있습니다. – demongolem

답변

1

당신은 이해에 풀고 사용할 수 있습니다 : 나는 시도 무엇

파이썬 2.7에서
dict((s, v) for (o, s), v in mydict.iteritems() if o is co1) 

:

{s: v for (o, s), v in mydict.iteritems() if o is co1} 
+0

그 트릭을 할 것으로 보인다. 코드가하는 일에 대해 내 마음을 감쌀 수있게되었습니다. 감사. – demongolem

0

그것은 당신이하려고하는 것 같은데 코퍼스 [?] 크기가 커짐에 따라 do는 매우 비효율적이 될 것입니다. 사전에 저장되는 [2] :

아마 당신이 대신하고 싶은 세 번째 배정에 해시 [0][1]입니다.

다음 포인터의 배열을 저장하기 만하면됩니다. (튜토리얼은 파이썬이라고 알고 있지만 중복으로 구현하기에 충분히 쉽습니다) 튜플의 네 번째 할당에 [3]. 튜플이있는 경우 저장하는 보조 구조를 유지함으로써

[3] 인구 (및 계산 가능), 당신은 (1) 거의 보장 O 이러한 쿼리를 수행 할 수 있습니다 :

  1. 열거 모든 반복을
  2. 열거 형 0.01 또는 없음
  3. 복제본을 삽입하는 대상은 무엇입니까?

관련 문제