반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 컴퓨터비전
- 버전관리
- 머신러닝
- I'm Sorry
- 소프트웨어공학
- 컴퓨터과학
- 네트워크
- 데이터베이스
- 소프트웨어
- 보안
- 알고리즘
- Yes
- 파이썬
- 사이버보안
- 데이터구조
- 2
- 인공지능
- 네트워크보안
- 데이터분석
- 프로그래밍
- 딥러닝
- 프로그래밍언어
- 자료구조
- 코딩
- 자바스크립트
- 웹개발
- 빅데이터
- 클라우드컴퓨팅
- 데이터과학
- 컴퓨터공학
Archives
- Today
- Total
스택큐힙리스트
어떻게 TypeError: unhashable type: 'list'를 해결할 수 있을까요? [중복] 본문
반응형
나는 파일을 다음과 같이 보이는 파일을 가져오려고 노력 중입니다:
AAA x 111
AAB x 111
AAA x 112
AAC x 123
...
그리고 아래와 같이 딕셔너리를 사용하여 출력합니다.
{AAA: ['111', '112'], AAB: ['111'], AAC: [123], ...}
다음과 같이 시도해보았습니다.
file = open(filename.txt, r)
readline = file.readline().rstrip()
while readline!= :
list = []
list = readline.split( )
j = list.index(x)
k = list[0:j]
v = list[j + 1:]
d = {}
if k not in d == False:
d[k] = []
d[k].append(v)
readline = file.readline().rstrip()
TypeError: unhashable type: 'list'
오류가 발생합니다. 딕셔너리의 키는 리스트 일 수 없다는 것을 알고 있지만, 값(value)을 리스트로 만들려고 시도하고 있습니다. 어디가 잘못되었는지 궁금합니다.
답변 1
# 'with'를 사용하면 파일이 올바르게 닫힐 때까지 보장합니다
with open('filename.txt', 'rb') as f:
d = {}
# 여기서는 readlines()를 사용하여 파일을 줄 단위로 분할하는 리스트를 생성합니다
for line in f.readlines():
# 이제 파일을 'x'로 분할합니다. 'x' 이전 부분이 키이고 'x' 이후 부분이 값입니다
line = line.split('x')
# 줄의 요소를 가져와 공백을 제거하고 변수에 할당합니다
# 더 익숙해지면 다음과 같이도 작동합니다:
# key, value = [x.strip() for x in line]
key = line[0].strip()
value = line[1].strip()
# 이제 딕셔너리에 키가 있는지 확인합니다. 키가 있으면 새로운 값이 추가되고,
# 키가 없으면 현재 값을 포함하는 새로운 리스트를 만듭니다
# (참고로, 여기에는 defaultdict을 사용하는 것이 좋습니다:)
if key in d:
d[key].append(value)
else:
d[key] = [value]
print d
# {'AAA': ['111', '112'], 'AAC': ['123'], 'AAB': ['111']}
Python 3.x를 사용하는 경우 작동을 올바르게 하기 위해 작은 조정을 해야 함에 유의하십시오. 파일을 rb
로 열면 line = line.split(b'x')
를 사용해야합니다 (이는 올바른 유형의 문자열로 바이트를 분할하는지 확인합니다). 파일을 with open('filename.txt', 'rU') as f:
(또는 with open('filename.txt', 'r') as f:
)로 열어도 문제없이 작동해야합니다.
답변 2
Korean SEO-conscious essay:에러 해결하기: TypeError - 'list'형의 타입은 해시 할 수 없음
프로그래밍할 때 종종 Type Error라는 에러를 만날 수 있습니다. 그 중 하나가 TypeError: unhashable type: 'list'로 출력되는데요. 이 에러는 주로 리스트(list) 타입을 사용할 때 발생하는데, 리스트는 변경 가능한(mutability) 객체이기 때문에 해시 가능한(hashing) 타입이 아니기 때문입니다. 이 에러를 해결하기 위해 몇 가지 방법이 있습니다.
첫째로, 리스트 대신 튜플(tuple)을 사용하는 것입니다. 튜플은 변경 불가능한(immutable) 객체이므로 해시 가능한 타입으로 사용할 수 있습니다. 따라서 리스트 대신 튜플을 사용하여 해당 에러를 해결할 수 있습니다.
둘째로, 리스트를 집합(set)으로 변환하는 것입니다. 집합은 해시 가능한 타입을 요구하기 때문에 리스트 타입을 집합으로 변환하면 에러가 발생하지 않습니다. 예를 들어, set(my_list)와 같이 리스트를 집합으로 변환할 수 있습니다.
셋째로, 리스트를 정렬하여 해결하는 것입니다. 정렬된 리스트는 해시 가능한 타입으로 여겨집니다. 따라서 리스트를 정렬한 후, 해시 값을 사용하고 싶다면 해당 에러를 피할 수 있습니다.
마지막으로, 사용하고 있는 리스트의 요소들이 해시 가능한 타입인지 확인해야 합니다. 리스트 내에 해시할 수 없는 객체가 포함되어 있는지 확인해야 합니다. 만약 리스트 요소 중에서 해시할 수 없는 객체가 있다면, 이 객체를 해시 가능한 타입으로 변환하거나 리스트에서 제거하여 에러를 해결할 수 있습니다.
TypeError: unhashable type: 'list' 에러는 리스트의 타입을 해시할 수 없다는 뜻입니다. 이 에러를 해결하기 위해서는 리스트를 튜플로 변환하거나 집합으로 변환하거나 정렬하여 해결할 수 있습니다. 또한, 리스트 내의 모든 요소가 해시 가능한 타입인지 확인하는 것도 중요합니다. 이러한 방법들을 적용하여 프로그래밍할 때 발생하는 에러를 효과적으로 해결할 수 있습니다.
반응형
Comments