programing

Python 사전 : TypeError : 해시 할 수없는 유형 : 'list'

copyandpastes 2021. 1. 15. 20:16
반응형

Python 사전 : TypeError : 해시 할 수없는 유형 : 'list'


다른 사전에서 시작하는 파이썬 사전을 채우는 데 문제가 있습니다.

"소스"사전에 문자열이 키로 있고 값당 사용자 지정 개체 목록이 있다고 가정 해 보겠습니다.

"소스"사전을 만들었던 것과 똑같이 대상 사전을 만들고 있는데 이것이 작동하지 않는 것이 어떻게 가능합니까?

나는 얻다

TypeError: unhashable type: 'list'

코드 :

aTargetDictionary = {}
for aKey in aSourceDictionary:
    aTargetDictionary[aKey] = []
    aTargetDictionary[aKey].extend(aSourceDictionary[aKey])

오류는 다음 줄에 있습니다. aTargetDictionary[aKey] = []


당신이 준 오류는 파이썬에서 딕셔너리 키는 변경 불가능한 유형이어야하고 (키가 변경 될 수 있다면 문제가있을 수 있음) 목록이 변경 가능한 유형이라는 사실 때문입니다.

귀하의 오류는 목록을 사전 키로 사용하려고 시도한다고 말하며 사전에 키로 넣으려면 목록을 튜플으로 변경해야합니다 .

파이썬 문서 에 따르면 :

키로 허용되지 않는 값의 유일한 유형은 목록이나 사전을 포함하는 값이거나 객체 ID가 아닌 값으로 비교되는 기타 변경 가능한 유형입니다. 그 이유는 사전을 효율적으로 구현하려면 키의 해시 값이 일정하게 유지되어야하기 때문입니다.


이것은 실제로 다소 이상합니다.

aSourceDictionary사전 이라면 코드가 설명하는 방식으로 실패 할 가능성이 있다고 생각하지 않습니다.

이것은 두 가지 가설로 이어집니다.

  1. 실제로 실행중인 코드가 질문의 코드와 동일하지 않습니다 (아마 이전 버전 또는 이후 버전?).

  2. aSourceDictionary 사실 사전은 아니지만 다른 구조 (예 : 목록)입니다.


귀하의 설명에 따라 일이 합산되지 않습니다. 경우 aSourceDictionary다음 루프가 제대로 작동해야하고, 사전이다.

>>> source = {'a': [1, 2], 'b': [2, 3]}
>>> target = {}
>>> for key in source:
...   target[key] = []
...   target[key].extend(source[key])
... 
>>> target
{'a': [1, 2], 'b': [2, 3]}
>>> 

잘 작동합니다 : http://codepad.org/5KgO0b1G , aSourceDictionary변수는 dict 이외의 데이터 유형을 가질 수 있습니다

aSourceDictionary = { 'abc' : [1,2,3] , 'ccd' : [4,5] }
aTargetDictionary = {}
for aKey in aSourceDictionary:
        aTargetDictionary[aKey] = []
        aTargetDictionary[aKey].extend(aSourceDictionary[aKey])
print aTargetDictionary

참조 URL : https://stackoverflow.com/questions/8532146/python-dictionary-typeerror-unhashable-type-list

반응형