이 문서의 내용은 Python에서 여러 매핑을 단일 매핑으로 병합하는 방법 및 분석(코드 예제)에 대한 것입니다. 필요한 참조 가치가 있습니다. .
1. 요구 사항
우리는 여러 개의 사전이나 맵을 가지고 있으며 이를 하나의 매핑 구조로 논리적으로 병합하여 값 조회나 키 존재 여부 확인과 같은 특정 작업을 수행하려고 합니다.
2. 해결 방법
두 개의 사전이 있다고 가정합니다.
a={'x':1,'z':3} b={'y':2,'z':4}
이제 검색 작업을 수행하려면 이 두 사전을 확인해야 합니다(예를 들어, 먼저 a에서 검색하고 찾지 못한 경우 b로 이동). 찾다). 간단한 방법은 컬렉션 모듈의 ChainMap 클래스를 사용하여 이 문제를 해결하는 것입니다. 예:
from collections import ChainMap a={'x':1,'z':3} b={'y':2,'z':4} c=ChainMap(a,b) print(c['x']) print(c['y']) print(c['z']) print(len(c)) print(list(c.keys())) print(list(c.values())) a['z']=5 print(c['z'])
실행 결과:
1 2 3 3 ['y', 'z', 'x'] [2, 3, 1] 5
3. Analysis
ChainMap은 여러 매핑을 허용한 다음 논리적으로 단일 매핑 메커니즘으로 작동할 수 있습니다. 그러나 이러한 매핑은 런타임 시 함께 병합되지 않습니다. 대신 ChainMap은 기본 매핑 관계를 기록하는 목록을 유지한 다음 이 목록을 검색하기 위해 일반적인 사전 작업을 재정의합니다. 대부분의 목록 작업은 잘 작동합니다. 예: len, 키(), 값().
중복된 키가 있는 경우 첫 번째 맵의 해당 값이 사용됩니다.
매핑을 수정하는 작업은 항상 나열된 첫 번째 매핑 구조에서 수행됩니다. 예:
del c['x'] #可以正常删除a中的'x':1 del c['y'] #会移除,因为第一个映射结构a中没有y键
ChainMap의 대안으로 사전의 update() 메서드를 사용하여 여러 사전을 병합하는 것을 고려할 수 있습니다. 예:
from collections import ChainMap a={'x':1,'z':3} b={'y':2,'z':4} #为了防止b被直接修改,先cope一份b c=dict(b) print(id(c)) print(id(b)) c.update(a) print(c['x']) print(c['y']) print(c['z'])
실행 결과:
4550769400 4549694808 1 2 3
작동하지만 완전한 사전 구축이 필요합니다. 개별적으로 개체를 생성합니다(또는 직접 수정하되 원본 데이터는 삭제). 또한 원본 사전 중 하나라도 수정되면 변경 사항이 병합된 사전에 반영되지 않지만 ChainMap은 반영됩니다.
위 내용은 여러 매핑을 단일 매핑으로 병합하는 Python 방법 및 분석(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!