ProgramingTip

어떤 경우에 튜플을 사전 키로 사용합니까?

bestdevel 2020. 12. 3. 08:17
반응형

어떤 경우에 튜플을 사전 키로 사용합니까?


나는 목록과 튜플차이점 을 연구하고 있습니다 (파이썬에서). 명백한 것은 튜플은 불변이며 (초기 할당 나중에는 값을 설명 수 없습니다).

기사의 한 문장이 나를 얻었습니다.

변경 불가능한 요소 만 사전 키로 사용할 수 있으므로 목록이 아닌 튜플 만 키로 사용할 수 있습니다.

튜플을 사전 키로 사용하고 싶은 상황을 생각하기 어렵습니다. 이것이 자연스럽고, 명확하고, 우아하거나, 명백한 솔루션 인 예제 문제를 제공 할 수럽?

편집하다 :

예를 들어 주셔서 감사합니다. 지금까지 매우 중요한 응용 프로그램은 함수 값 캐싱입니다.


클래식 예 : 포인트 값을 (x, y)의 튜플로 저장합니다.


salaries = {}
salaries[('John', 'Smith')] = 10000.0
salaries[('John', 'Parker')] = 99999.0

편집 1 물론 할 수있는 salaries['John Smith'] = whatever추가 작업을 수행해야합니다. 어떤 약 pointColor[(x, y, z)] = "red", 여기 튜플 키의 장점은 더욱 많이진다.

이것이 최선의 방법이 아니라 점을 강조해야합니다. 많은 경우에 그런 상황을 처리하기 위해 특별한 클래스를 만드는 것이 좋지만 Arrieta는 내가 그녀에게 준 예제를 요청했습니다.

0 수정

그런데 각 튜플 요소도 해시해야합니다.

>>> d = {}
>>> t = (range(3), range(10, 13))
>>> d[t] = 11
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list objects are unhashable
>>>

나는 튜플을 dict키로 많이 사용한다.

  • 예를 들어 여러 값에서 고유 키를 사용할 때 사용합니다.

    를 기반으로 first_name, 키 last_name는 키 =이 될 수 '%s_%s'%(first_name, last_name)있습니다, 더 좋은 방법입니다 key = (first_name, last_name)때문에

    1. 더 읽어서 짧으며 계산이 적습니다.
    2. 물건 값을 검색하는 것이 더 값을 검색합니다.
    3. [해석] 중요한 추론 key = '%s_%s'%(first_name, last_name)잘못이며, 값에, 대한 모든 고유 키를 제공하지 않을 수 있습니다 first_namelast_name값이 포함되어있는 경우 예를 들어,_
  • 함수 결과 캐싱

    def func(a1, b1):
        if (a1,b1) in cache: return cache[(a1,b1)]
        ...
    

어느 위치에 따라 네트워크 장치를 비교하는 응용 프로그램에서 튜플을 사전 키로 사용했습니다. 각 위치에 대해 설명하기 때문에 여러 장치를 처리하는 동안 해당하고 일치하는 장치가 아직 표시됩니다. 알 수있는 자연스러운 장치가 제공됩니다.

seen = {}
seen[('abc', 'lax')] = 1
seen[('xyz', 'nyc')] = 1

함께 키를 형성하는 여러 요소를 표시하려는 경우 튜플을 키로 사용합니다.

예 : {(<x-coordinate>,<y-coordinate>): <indicating letter>}

... 여기서 x-coordinate또는 y-coordinate별도로 사용하면 그 점을 나타내지 않을을 구석으로입니다.


사용하면 좋은 경우 튜플을 사용한다고 생각합니다. 예를 들어 사전 키가 정렬 필드를 설치하고 가정합니다 (분명히 키가 인 것을 방지하는 기본 정렬 필드가 있음 None). 성, 이름으로 정렬하는 경우와 같이 여러 정렬 필드가 필요한 경우 튜플을 사전 키로 사용하지 않는 것이 좋습니다.

뭐라고 말하는 것이 아니라 사용이 제한적일 수 있습니다.


검색 공간의 한 지점에 대한적인 일정 시간 검색에 사용할 수 있습니다. 예를 들어 각 튜플에 선택할 수있는 제약이 있습니다. 제약은 (v1.v2) 형식 일 수 있습니다. 여기서 색상 (v1)! = color (v2) for coloring prob 등입니다. 튜플을 사전 키로 사용하면 순열이 제약 조건을 사용하는지 여부를 알 수 있습니다. .


머신 러닝과 딥 대한 러닝의 맥락에서 최고의 하이퍼에 대한 하이퍼스런 검색을 수행하는 경우 튜플을 사용하는 것은 확실히 매우 유용합니다.

하자 당신을위한 최고의 하이퍼 파라미터 조합에 대해 검색하는 말 learning_rate, regularization_factor하고 model_complexity.

그런 다음 Python에서 적절한 hparams가 키로 구축 할 수있는 다른 조합 과 학습 알고리즘의 해당하는 것 값으로 만드는 사전을 만들 수 있습니다.

hparams_hist = {}
hparams_hist[(0.001, 0.7, 5)] = weight_matrix1
hparams_hist[(0.0001, 0.8, 2)] = weight_matrix2

현재까지 구축 된 실시간 예측을 위해 추가로 필요합니다.


a[("John", "Doe")] = "123 Fake Street"

기본 분석 도구를 구축하는 경우 퍼널 분석에 사용할 수 있습니다.

예를 들어 , text2에 마우스를 올려 놓은 후 image3를 클릭 한 사람 수를 계산합니다.

    funnels = defaultdict(int)
    funnels[('hovered_text2', 'clicked_image3')] += 1

def getHash(word):
    result={}
    for i in range(len(word)):
        if word[i] in result:
            result[word[i]]+=1
        else :
            result[word[i]]=1

    return tuple (sorted((result.items())))


def groupAnagrams(words):
    resultHash={}
    for i in range(len(words)):
        s=getHash(words[i].lower())
        #print s
        if s in resultHash :
            l=list(resultHash[s]) 
            l.append(words[i])
            resultHash[s] = l # list(resultHash[s]).append(words[i])  
        else :
            resultHash[s]=[words[i]] # Creating list 

    return resultHash.values()

참고 URL : https://stackoverflow.com/questions/1938614/in-what-case-would-i-use-a-tuple-as-a-dictionary-key

반응형