홈>
dict 클래스에서 상속 받고 항목을 1 대 1로 매핑하려고합니다.
key : value 대신setitem을 구현하려고합니다. key1 : key 2, key2 : key1도 추가됩니다. 키 중 하나가 이미 존재하면 쌍을 추가하기 전에 터져야합니다.집합을 어떻게 구현할 수 있습니까?
init는 빈 사전 또는 주어진 사전에서 매핑을 구성 할 수 있어야합니다
어떤 아이디어? 감사합니다
class Mapping(dict):
def __init__(self, Map = None):
if Map = None:
Map = dict()
else:
self.update(Map)
def __repr__(self):
return "Mapping({})".format(dict.__repr__self)
def pop(self):
return self.pop #??? How can I pop a key and also pop the key it maps to?
def __setitem__(self, key1,key2):
self.__dict__[key1] = key2
self.__dict__[key2] = key1
- 답변 # 1
- 답변 # 2
다음과 같이 할 수 있습니다 :
from collections.abc import MutableMapping # We need to implement those method: __getitem__, __setitem__, __delitem__, __iter__, __len__ class TwoWayDict(MutableMapping): __slots__ = '__dict__' def __init__(self, *args, **kwargs): self.__dict__.update(*args, **kwargs) def __getitem__(self, key): return self.__dict__[key] def __setitem__(self, key, value): self.__dict__[key] = value self.__dict__[value] = key def __delitem__(self, key): self.__dict__.__delitem__(self[self[key]]) self.__dict__.__delitem__(self[key]) # this do not work if key == value def __iter__(self): return iter(self.__dict__) def __len__(self): return len(self.__dict__) def get(self, key, default=None): return self[key] if key in self else default def __str__(self): return str(self.__dict__)
테스트 :
a = TwoWayDict() a['key1'] = 'key2' print(a) print(a['key1']) print(a['key2']) print(len(a)) for key, val in a.items(): print(key, val)
결과 :
{'key1': 'key2', 'key2': 'key1'} key2 key1 2 key1 key2 key2 key1
길이와 반복은 모호 할 수 있습니다. 중복 키를 표시하지 않으려면 dict 항목에서 키를 찾아 해당 키를 반환해야합니다. 팝을 위해 SW Williams가 제안한 솔루션을 사용할 수 있습니다.
편집 : dict (아마도 할당 ...)에서 상속 해야하는 경우
__setitem__
를 무시하므로 업데이트를 구현하는 것을 잊지 마십시오. 받아쓰기 또한 키에 대한 일대일 맵이있는 경우__del__
에서이를 처리해야합니다. 그리고__pop__
기능.
관련 자료
- for loop - 파이썬에서 사전을 반복 할 때 나머지 항목을 얻는 방법은 무엇입니까?
- Python에서 클래스 메서드를 호출하는 방법은 무엇입니까?
- 파이썬 극작가로 스팬 클래스의 내용을 읽는 방법
- linked list - 파이썬 클래스 메서드는 값 대신 변수의 주소를 인쇄합니다
- Python 내부 클래스 값 할당
- 파이썬의 함수에 클래스 속성을 전달하고 클래스의 속성으로 사용하는 방법
- 파이썬에서 클래스 유형의 클래스 메서드 인수에 전달하는 방법은 무엇입니까?
- python : 파이썬은 목록에서 유사한 항목을 제거합니다
- Declare a Dictionary in a Class - 클래스에서 사전 선언 - 파이썬
- 파이썬에서 클래스를 비 클래스로 변환
- 파이썬을 사용하여 클래스 구성원별로 사전 정렬
- oop - 파이썬 - 하위가 아닌 다른 클래스의 클래스 속성에 액세스
- python - 다른 py 파일에서 사용자 지정 클래스 가져 오기
- Enum 클래스에서 Python 반환 int
- Python에서 함수에서 클래스로 목록 전달
- Python에서 for 루프의 나머지 항목을 검색하려면 어떻게해야합니까?
- Python abstract property () "추상 메서드로 [] 추상 클래스를 인스턴스화 할 수 없습니다"
- oop - python - __init__ 함수 내에서 클래스 변수 및 클래스 메서드 호출
- Python의 YAML에서 사용자 지정 클래스의 개체 만들기
- 파이썬에서 속성을 리터럴 이름으로 설정하는 클래스를 중지하는 방법은 무엇입니까?
관련 질문
- attrs python 패키지로 기본 메소드를 호출하는 방법
- python : 파이썬 함수에서 하드 코딩된 문자열 값을 피하는 방법
- python : 아나콘다를 사용하여 jupyter 노트북에 영어 공간 모델을 설치하는 방법
- python : pyglet: on_resize가 그래픽을 깨뜨립니다.
- python : 파이썬을 설치하는 설치 프로그램을 어떻게 만들 수 있습니까?
- python : for 루프를 사용하여 각 항목 없이 모든 목록을 인쇄하려면 어떻게 해야 합니까? 파이썬에 대안이 있습니까?
- PyTelegramBotAPI는 python3.9에서 send_invoice를 보낼 수 없습니다.
- python : Selenium TypeError: __init__()에 예기치 않은 키워드 인수 'service'가 있습니다. 이 경우 왜?
- bash 스크립트에서 올바른 Python 설치를 동적으로 선택하십시오.
- python : 여러 함수 호출에 대해 원래 난수 출력 유지 [중복]
pop
키를 인수로 사용하여 연관된 값을 리턴합니다. pop1 key1에서 얻은 값을 key2로 팝하십시오.self.__dict__.pop(self.__dict__.pop(key))
를 할 수 있습니다