Python 에서 사전 모듈 ChainMap 의 숨겨 진 구 덩이 를 통합 합 니 다[추천]

Python 에서 우리 가 두 개의 사전 을 합병 해 야 할 때 사전update방법 을 사용 할 수 있 습 니 다.예 를 들 어:

a = {'a': 1, 'b': 2}
b = {'x': 3, 'y': 4}
a.update(b)
print(a)
다음 그림 과 같이 실행 효과:

그러나 이 방법 에는 한 가지 문제 가 있다.그것 은 그 중의 한 사전 을 바 꿀 것 이다.만약 우리 가 원래 있 던 두 사전 을 바 꾸 고 싶 지 않다 면,우 리 는 반드시 단독으로 사전 을 하나 더 만들어 야 한다.

a = {'a': 1, 'b': 2}
b = {'x': 3, 'y': 4}
c = dict(a)
c.update(b)
print(c)
print(a)

만약 원래 의 두 사전 이 매우 크다 면,이런 방식 은 대량의 메모 리 를 낭비 할 것 이다.
기 존의 사전 중 하 나 를 직접 수정 하 든 다른 사전 을 만 들 든 이 두 가지 방안 은 모두 결함 이 있다.그렇다면 기 존 사전 을 수정 하지 않 고 새로운 사전 을 만 들 지 않 는 방법 은 없 을 까?
정 답 은collections모듈 아래ChainMap다.
사용ChainMap은 여러 사전 을 하나의ChainMap대상 으로 합 칠 수 있다.이 상 대 를 읽 고 쓰 는 것 은 마치 사전 을 읽 는 것 과 같다.
예 를 들 면:

from collections import ChainMap
a = {'a': 1, 'b': 2}
b = {'x': 3, 'y': 4}
c = ChainMap(a, b)
print(c['a'])
print(c['y'])
다음 그림 과 같이 실행 효과:

두 사전 을 합병 할 수 있 을 뿐만 아니 라ChainMap여러 사전 을 받 아들 이 고 그들 을 모두 합 칠 수 있다.

from collections import ChainMap
a = {'a': 1, 'b': 2}
b = {'x': 3, 'y': 4}
c = {'z': 5, 'w': 6}
d = {'m': 7, 'h': 8, 'k': 9}
e = ChainMap(a, b, c, d)
print(e['a'], e['y'], e['z'], e['k'])
다음 그림 과 같이 실행 효과:
ChainMap사전 을 합 친 것 이 아니 라 내부 에 하나의 Key 를 각 사전 의 맵 에 저장 합 니 다.읽 기e[key]를 할 때 이 key 가 어느 사전 에 있 는 지 확인 한 다음 에 해당 하 는 사전 에서 해당 하 는 값 을 조회 합 니 다.그래서 ChainMap 을 사용 하려 면 추가 메모리 공간 이 거의 필요 하지 않 습 니 다.(현재 이 대상 은 스스로 공간 을 차지 하지만 큰 사전 을 합 치 려 면 자신 이 사용 하 는 공간 은 거의 무시 할 수 있 습 니 다)
그래서 사전 을 완벽 하 게 통합 할 수 있 을 것 같 지 않 아 요?
그것 을 사용 하기 전에 너 는 반드시 그것 의 운행 원 리 를 이해 해 야 한다.만약 당신 이 그것 의 운행 원 리 를 이해한다 면,아래 의 몇 가지 문 제 는 코드 를 실행 하기 전에 결과 가 무엇 인지 알 게 될 것 입 니 다.
만약 두 사전 안에 키 의 이름 이 같다 면,ChainMap 을 사용 하면 어떤 것 을 읽 습 니까?ChainMap 대상 에 키-Value 쌍 을 추가 하면 이 값 은 어디 에 추 가 됩 니까?원래 사전에 서 Key 하 나 를 삭제 하면 ChainMap 대상 에 있 는 Key 도 사라 지나 요?ChainMap 대상 에서 Key 를 삭제 하면 원래 사전에 있 던 Key 가 사라 지나 요?
먼저 첫 번 째 문제 의 답 을 말씀 드 리 겠 습 니 다.ChainMap대상 은 이 Key 를 가 진 첫 번 째 사전 의 값 을 사용 합 니 다.다음 그림 과 같 습 니 다.

두 번 째 문 제 는 다음 그림 과 같이 새로운 Key-Value 가 첫 번 째 사전 에 추 가 됩 니 다.

세 번 째 문 제 는 원래 의 사전 을 수정 하면ChainMap대상 도 상응 하 게 업 데 이 트 됩 니 다.

네 번 째 질문 입 니 다.만약 에 이 Key 가 하나의 원본 사전 에 만 존재 한다 면 이 Key 는 원본 사전 에서 삭 제 됩 니 다.이 키 가 여러 사전 에 존재 한다 면 키 는 첫 번 째 사전에 서 삭 제 됩 니 다.첫 번 째 사전 에서 삭 제 된 후 두 번 째 원본 사전 의 키 는 계속 읽 을 수 있 습 니 다ChainMap.

상기 4 시,당신 이 사용ChainMap할 때 반드시 기억 해 야 합 니 다.그렇지 않 으 면 발견 할 수 없 는 Bug 를 초래 할 수 있 습 니 다. 
 총결산
위 에서 말 한 것 은 소 편 이 소개 한 Python 에서 사전 모듈 ChainMap 의 숨겨 진 구 덩이 를 합 친 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기