>  기사  >  백엔드 개발  >  여러 매핑을 단일 매핑으로 병합하는 Python 방법 및 분석(코드 예)

여러 매핑을 단일 매핑으로 병합하는 Python 방법 및 분석(코드 예)

不言
不言앞으로
2018-11-26 16:39:492189검색

이 문서의 내용은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제