어떤 경우에 튜플을 사전 키로 사용합니까?
나는 목록과 튜플 의 차이점 을 연구하고 있습니다 (파이썬에서). 명백한 것은 튜플은 불변이며 (초기 할당 나중에는 값을 설명 수 없습니다).
기사의 한 문장이 나를 얻었습니다.
변경 불가능한 요소 만 사전 키로 사용할 수 있으므로 목록이 아닌 튜플 만 키로 사용할 수 있습니다.
튜플을 사전 키로 사용하고 싶은 상황을 생각하기 어렵습니다. 이것이 자연스럽고, 명확하고, 우아하거나, 명백한 솔루션 인 예제 문제를 제공 할 수럽?
편집하다 :
예를 들어 주셔서 감사합니다. 지금까지 매우 중요한 응용 프로그램은 함수 값 캐싱입니다.
클래식 예 : 포인트 값을 (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)
때문에- 더 읽어서 짧으며 계산이 적습니다.
- 물건 값을 검색하는 것이 더 값을 검색합니다.
- [해석] 중요한 추론
key = '%s_%s'%(first_name, last_name)
잘못이며, 값에, 대한 모든 고유 키를 제공하지 않을 수 있습니다first_name
및last_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
'ProgramingTip' 카테고리의 다른 글
Angular 2에서 쿼리 변수를 처리하는 방법 (0) | 2020.12.03 |
---|---|
C #의 다중 시작 화면? (0) | 2020.12.03 |
특정에서 특정 HTTP 오류 잡기 (0) | 2020.12.03 |
이메일 주소를 자동 감지 할 수 없습니다. (0) | 2020.12.03 |
Java 메서드가 모든 유형의 일반 목록을 반환하는 방법은 무엇입니까? (0) | 2020.12.03 |