[PYTHON] 파이썬 사전을 키로 사용 (중첩되지 않음)
PYTHON파이썬 사전을 키로 사용 (중첩되지 않음)
파이썬에서는 사전을 다른 사전의 키로 사용할 수 없습니다. 중첩되지 않은 사전을 키로 사용하기위한 해결 방법이 있습니까?
보다 복잡하지 않은 해시 가능 객체와 내 특정 유스 케이스의 일반적인 문제가 여기로 옮겨졌습니다. 내 유스 케이스에 대한 내 원래 설명이 잘못되었습니다.
해결법
-
==============================
1.정말 불변의 사전이 있다면 (필자가 [( 'content-type', 'text / plain'), ( 'host', ' example.com ')]), 당신은 당신의 딕트로 변환 할 수 있습니다 :
정말 불변의 사전이 있다면 (필자가 [( 'content-type', 'text / plain'), ( 'host', ' example.com ')]), 당신은 당신의 딕트로 변환 할 수 있습니다 :
-
==============================
2.사전을 키로 사용해야한다면, 사전을 투플 (tuple)의 튜플로 변환 할 것입니다.
사전을 키로 사용해야한다면, 사전을 투플 (tuple)의 튜플로 변환 할 것입니다.
이 SO 질문은 유용 할 것입니다. 중첩 된 사전을 구현하는 가장 좋은 방법은 무엇입니까?
다음은 사전을 병합하는 병합 모듈의 예입니다. http://yawpycrypto.sourceforge.net/html/public/Flatten.Flatten-module.html
귀하의 유스 케이스를 완전히 이해하지 못하고 최적화가 필요없는 무언가를 조기에 최적화하려고하고 있다고 생각합니다.
-
==============================
3.이를 수행하는 한 가지 방법은 dict를 서브 클래스 화하고 해시 메소드를 제공하는 것입니다. 즉 :
이를 수행하는 한 가지 방법은 dict를 서브 클래스 화하고 해시 메소드를 제공하는 것입니다. 즉 :
class HashableDict(dict): def __hash__(self): return hash(tuple(sorted(self.iteritems()))) >>> d = HashableDict(a=1, b=2) >>> d2 = { d : "foo"} >>> d2[HashableDict(a=1, b=2)] "foo"
그러나 dicts (또는 임의의 변경 가능한 유형)가 이렇게하지 않는 이유를 명심하십시오 : 해시 테이블에 객체를 추가 한 후에 객체를 변경하면 해시가 변경되므로 dict이 잘못된 버킷에있을 수 있습니다. 잘못된 결과가 반환됩니다.
이 경로를 사용하는 경우 dicts가 다른 사전에 추가 된 후에 절대로 변경되지 않거나 적극적으로 금지됩니다 (예 : __hash__의 첫 번째 호출 이후 해시가 변경되지 않는지 확인). if 아니.)
-
==============================
4.흠, 함수 호출을 메모하는 유스 케이스가 아닌가? 데코레이터를 사용하면 임의의 기능을 쉽게 지원할 수 있습니다. 그리고 예, 그들은 종종 논쟁을 피클링하고, 순환 추론을 사용하여, 비표준 형에 대해서는 절편 될 수있는 한 작동합니다.
흠, 함수 호출을 메모하는 유스 케이스가 아닌가? 데코레이터를 사용하면 임의의 기능을 쉽게 지원할 수 있습니다. 그리고 예, 그들은 종종 논쟁을 피클링하고, 순환 추론을 사용하여, 비표준 형에 대해서는 절편 될 수있는 한 작동합니다.
예 : 이 메모 샘플
-
==============================
5.someDictionary를 키로 변환하려면 다음과 같이하십시오.
someDictionary를 키로 변환하려면 다음과 같이하십시오.
key = tuple(sorted(someDictionary .items())
dict (key)를 사용하여 쉽게 이것을 뒤집을 수 있습니다.
-
==============================
6.나는 왜 당신이 이것을하고 싶어하는지 알지 못한다. 그러나 정말로 정말로해야 할 일이 있다면, 당신은 사전을 pickling 할 수있다.
나는 왜 당신이 이것을하고 싶어하는지 알지 못한다. 그러나 정말로 정말로해야 할 일이 있다면, 당신은 사전을 pickling 할 수있다.
mydict = {"a":1, "b":{"c":10}} import pickle key = pickle.dumps(mydict) d[key] = value
-
==============================
7.내가 당신의 질문을 정확하게 이해하는지 모르겠지만, 시도해 볼게요.
내가 당신의 질문을 정확하게 이해하는지 모르겠지만, 시도해 볼게요.
d[repr(a)]=value
이런 식으로 사전을 반복 할 수 있습니다.
for el1 in d: for el2 in eval(el1): print el2,eval(el1)[el2]
from https://stackoverflow.com/questions/1600591/using-a-python-dictionary-as-a-key-non-nested by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 음수 0을 파이썬 문자열에서 양수로 0으로 포맷하는 방법은 무엇입니까? (0) | 2018.11.23 |
---|---|
[PYTHON] 사전 키가 존재하는지 확인하고 그것이 존재한다면 값을 처리하는 가장 효율적인 방법 (0) | 2018.11.23 |
[PYTHON] 파이썬에서 문자열을 분할하지 않고 튜플로 변환 (0) | 2018.11.23 |
[PYTHON] 최신 종속성에도 불구하고 파이썬 요청에 SSL 오류가 발생했습니다. (0) | 2018.11.23 |
[PYTHON] Python에서 순차적으로 명령 실행 (0) | 2018.11.23 |