Python 사전 : TypeError : 해시 할 수없는 유형 : 'list'
다른 사전에서 시작하는 파이썬 사전을 채우는 데 문제가 있습니다.
"소스"사전에 문자열이 키로 있고 값당 사용자 지정 개체 목록이 있다고 가정 해 보겠습니다.
"소스"사전을 만들었던 것과 똑같이 대상 사전을 만들고 있는데 이것이 작동하지 않는 것이 어떻게 가능합니까?
나는 얻다
TypeError: unhashable type: 'list'
코드 :
aTargetDictionary = {}
for aKey in aSourceDictionary:
aTargetDictionary[aKey] = []
aTargetDictionary[aKey].extend(aSourceDictionary[aKey])
오류는 다음 줄에 있습니다. aTargetDictionary[aKey] = []
당신이 준 오류는 파이썬에서 딕셔너리 키는 변경 불가능한 유형이어야하고 (키가 변경 될 수 있다면 문제가있을 수 있음) 목록이 변경 가능한 유형이라는 사실 때문입니다.
귀하의 오류는 목록을 사전 키로 사용하려고 시도한다고 말하며 사전에 키로 넣으려면 목록을 튜플으로 변경해야합니다 .
파이썬 문서 에 따르면 :
키로 허용되지 않는 값의 유일한 유형은 목록이나 사전을 포함하는 값이거나 객체 ID가 아닌 값으로 비교되는 기타 변경 가능한 유형입니다. 그 이유는 사전을 효율적으로 구현하려면 키의 해시 값이 일정하게 유지되어야하기 때문입니다.
이것은 실제로 다소 이상합니다.
aSourceDictionary
사전 이라면 코드가 설명하는 방식으로 실패 할 가능성이 있다고 생각하지 않습니다.
이것은 두 가지 가설로 이어집니다.
실제로 실행중인 코드가 질문의 코드와 동일하지 않습니다 (아마 이전 버전 또는 이후 버전?).
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
'programing' 카테고리의 다른 글
두 C # 개체 간의 속성 차이 찾기 (0) | 2021.01.15 |
---|---|
jquery가없는 jquery의 'trigger'메소드와 동등한 것은 무엇입니까? (0) | 2021.01.15 |
조각 만들기 : 생성자 대 newInstance () (0) | 2021.01.15 |
DateTime.ParseExact (String, String, IFormatProvider)에 IFormatProvider가 필요한 이유는 무엇입니까? (0) | 2021.01.15 |
Delphi 2006-2010 오류 : "C : \ Users \ Admin \ AppData \ Local \ Temp \ EditorLineEnds.ttr 파일을 만들 수 없습니다." (0) | 2021.01.15 |