[PYTHON] Python 값에 대해 "해시 가능"합니다.
PYTHONPython 값에 대해 "해시 가능"합니다.
나는 임의의 딕트 (dict)를 가져 와서 그것을 새로운 딕트 (dict)에 복사하는 것에 흥미가있다.
하나의 돌연변이는 키와 값을 교환하는 것입니다. 불행히도, 일부 가치는 독자적인 권리를 가지고 있습니다. 그러나이 "unhashable 형식 : 'dict'"오류가 발생합니다. 나는 단지 값을 문자열로 만들고 키를주는 것에 신경 쓰지 않습니다. 그러나 나는 이렇게 할 수 있기를 바란다 :
for key in olddict:
if hashable(olddict[key]):
newdict[olddict[key]] = key
else
newdict[str(olddict[key])] = key
거기에 예외를 트래핑 및 "unhashable 형식"에 대한 메시지 문자열을 구문 분석을 포함하지 않는 이렇게 깨끗한 방법이 있나요?
해결법
-
==============================
1.파이썬 2.6부터 추상 기본 클래스 컬렉션을 사용할 수 있습니다. Hashable :
파이썬 2.6부터 추상 기본 클래스 컬렉션을 사용할 수 있습니다. Hashable :
import collections >>> isinstance({}, collections.Hashable) False >> isinstance(0, collections.Hashable) True
이 접근법은 __hash__에 대한 문서에서도 간략하게 언급되어 있습니다.
-
==============================
2.
def hashable(v): """Determine whether `v` can be hashed.""" try: hash(v) except TypeError: return False return True
-
==============================
3.해시 가능한 모든 파이썬 객체에는 .__ hash __ () 메소드가 있습니다. 당신은 그것을 확인할 수 있습니다.
해시 가능한 모든 파이썬 객체에는 .__ hash __ () 메소드가 있습니다. 당신은 그것을 확인할 수 있습니다.
olddict = {"a":1, "b":{"test":"dict"}, "c":"string", "d":["list"] } for key in olddict: if(olddict[key].__hash__): print str(olddict[key]) + " is hashable" else: print str(olddict[key]) + " is NOT hashable"
산출
1 is hashable string is hashable {'test': 'dict'} is NOT hashable ['list'] is NOT hashable
-
==============================
4.왜 오리 타이핑을 사용하지 않습니까?
왜 오리 타이핑을 사용하지 않습니까?
for key in olddict: try: newdict[olddict[key]] = key except TypeError: newdict[str(olddict[key])] = key
from https://stackoverflow.com/questions/3460650/asking-is-hashable-about-a-python-value by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python / IPython ImportError : site라는 모듈이 없습니다. (0) | 2018.11.14 |
---|---|
[PYTHON] WhiteNoise가 활성화되면 'collectstatic'명령이 실패합니다. (0) | 2018.11.14 |
[PYTHON] 파이썬의 무작위 반복 (0) | 2018.11.14 |
[PYTHON] Errno 9 얻기 : 파이썬 소켓에 잘못된 파일 기술자 (0) | 2018.11.14 |
[PYTHON] 스레드에서 클래스 메소드 실행 (파이썬) (0) | 2018.11.14 |