나는 파이썬에서 사전과 비슷한 데이터 구조를 찾고있다. 차이점은 키가 두 개인다는 것입니다. 나는 일정한 시간에 값에 접근 할 수 있기를 원한다. Like :키가 두 값인 사전과 비슷한 파이썬 데이터 구조?
dict.get(dog, smurf)
{(dog, smurf): 40}
이게 가능합니까?
이것이 없으면 사전으로 사전을 작성합니다. 그러나 위의 방법이 더 편리 할 것입니다.
{dog: {(smurf: 40)}}
나는 파이썬에서 사전과 비슷한 데이터 구조를 찾고있다. 차이점은 키가 두 개인다는 것입니다. 나는 일정한 시간에 값에 접근 할 수 있기를 원한다. Like :키가 두 값인 사전과 비슷한 파이썬 데이터 구조?
dict.get(dog, smurf)
{(dog, smurf): 40}
이게 가능합니까?
이것이 없으면 사전으로 사전을 작성합니다. 그러나 위의 방법이 더 편리 할 것입니다.
{dog: {(smurf: 40)}}
무엇이 당신을 멈추게합니까?
d = {(dog, smurf): 40}
print d[(dog, smurf)] # 40
와우, 나도 그걸 몰랐어. 아마도 처음 시도했을 것입니다. – egidra
내가 오해하지 않는 한, 튜플과 함께 일반 dict 색인을 사용할 수 있습니다. 키가 모두 해시 가능한 경우 (불변) 튜플은 해시 가능하며 dict 키로 사용할 수 있습니다.
>>> d = {('dog', 'smurf'): 123}
>>> d[('dog', 'smurf')]
123
>>> d.get(('dog', 'smurf'))
123
당신이 정말 풀고/튜플 포장을 사용하는 것으로, 중복 괄호없이 d.get
을 사용하여 다음 dict
에서 상속과 get
방법 및/또는 __getitem__
을 재정의합니다. 그러나 좋은 이유가 필요하지 않으면 그렇게하지 마십시오.
아, 나는 몰랐다. – egidra
나는 귀하의 예를 잘 이해하지 못합니다. 이런 뜻인가요?
>>> dog = 'dog'
>>> smurf = 'smurf'
>>> d = {(dog, smurf): 40}
>>> d[(dog, smurf)]
40
튜플은 변경할 수 없으며 포함 된 개체도 불변 인 경우 사전 키로도 사용할 수 있습니다.
하지만 dog
에 변경 가능한 객체를 할당하면, 그것은 작동하지 않습니다
>>> dog = ['d', 'o', 'g']
>>> d[(dog, smurf)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
예, 맞습니다. 나는 그것이 가능하다는 것을 몰랐다. – egidra
당신은 괄호가 필요하지 않습니다 :
>>> d = {}
>>> d['jim', 'joe'] = 7
>>> d['jim', 'joe']
7
>>> d
{('jim', 'joe'): 7}
튜플은 괄호에 의해 표시되지 않습니다. 그들은 쉼표로 표시됩니다. 괄호는 때때로 모호성 제거에만 필요합니다.
몇 가지 의견 : dict'dict'을 호출하지 마십시오. dict.get (dog, smurf)는 파이썬을 'dict else dog in dur else smurf'라고하는 의미로 'dict [dog]'라고 읽는 사람이 해석합니다.이 경우는 당신이 의미하는 바가 아닙니다! – wim