>백엔드 개발 >파이썬 튜토리얼 >Python 프로그래밍: 사전 체인 매핑(ChainMap)을 사용하는 또 다른 방법, 플레이해 보세요!

Python 프로그래밍: 사전 체인 매핑(ChainMap)을 사용하는 또 다른 방법, 플레이해 보세요!

WBOY
WBOY앞으로
2023-04-11 15:04:031461검색

머리말

컬렉션은 dict, list, set, tuple과 같은 Python의 일반적인 내장 컨테이너를 대체할 수 있는 특수 컨테이너 데이터 유형(Container Datatype)입니다. 컨테이너는 다양한 개체를 저장하는 데 사용할 수 있는 특수 목적 개체입니다. 이는 포함된 객체에 액세스하고 이를 반복하는 방법을 제공합니다.

Python은 컨테이너 데이터 유형을 구현하는 컬렉션 모듈을 제공합니다. 이 장 시리즈에서는 다음을 포함하는 컬렉션 모듈의 다양한 컬렉션 유형에 대해 알아봅니다.

    UserString
  • 각 컨테이너 유형인 ChainMap을 소개하겠습니다.
  • ChainMap 알아보기
  • Python에서 제공하는 ChainMap 클래스(체인 매핑 클래스라고 함)는 많은 매핑을 신속하게 연결하여 단일 단위로 처리할 수 있도록 하는 사전과 유사한 클래스입니다. 일반적으로 새 사전을 만들고 여러 update() 호출을 실행하는 것보다 훨씬 빠릅니다.
  • 구문 형식은 다음과 같습니다.
  • xchainMap = collections.ChainMap(*maps)
  • 설명: 구문 형식의 collections는 가져온 완성 모듈의 이름입니다. 다음과 같이 모듈을 가져오는 경우: import collections as cts, 구문은 다음과 같이 변경될 수 있습니다: class cts.ChainMap(*maps) 또는 퍼지 가져오기: from collections import ChainMap, 이는 다음과 같이 수정될 수 있습니다: ChainMap(*maps).
  • ChainMap은 여러 사전 또는 기타 매핑을 결합하여 업데이트 가능한 단일 보기(사전 목록)를 만듭니다. 매핑이 지정되지 않은 경우 새 체인 맵(ChainMap)이 항상 하나 이상의 매핑을 사용할 수 있도록 빈 사전이 제공됩니다.
체인 맵의 기본 매핑은 목록에 저장됩니다. 목록은 공개되며 지도 속성을 사용하여 액세스하거나 업데이트할 수 있습니다. 맵 속성 외에 체인 매핑에는 다른 새로운 확장 상태가 없습니다.

ChainMap은 참조를 통해 기본 매핑을 병합합니다. 따라서 기본 맵 중 하나가 업데이트되면 해당 변경 사항이 ChainMap에도 반영됩니다.

체인 매핑은 모든 일반 사전(dict) 메서드를 지원합니다. 또한, 새로운 하위 컨텍스트를 생성하는 메서드에 대한 map 속성이 있으며 속성 map을 사용하여 첫 번째 맵을 제외한 모든 맵에 액세스할 수 있습니다. 맵은 목록입니다.

첫 번째 검색부터 마지막 ​​검색까지 정렬된 사용자 업데이트 가능 매핑 목록에 해당합니다. 검색할 매핑을 변경하기 위해 수정할 수 있는 유일한 저장된 상태입니다. 이러한 목록에는 항상 하나 이상의 매핑이 포함되어야 합니다.

아래의 간단한 예를 보세요. 코드 목록은 다음과 같습니다.

프로그램 실행의 출력 결과는 다음과 같습니다.

ChainMap({'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'})
[{'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'}]

위 목록에서는 두 개의 사전을 사용하여 ChainMap 개체( 체인_맵). 그런 다음 ChainMap 객체와 지도 속성을 인쇄합니다. 출력에서 볼 수 있듯이 결과는 이러한 사전의 구성 보기입니다.

ChainMap 키 값에 액세스

key() 및 value() 메서드를 사용하여 ChainMap 키와 값에 액세스할 수 있습니다. 코드 예시는 다음과 같습니다.

위 코드의 출력 결과는 다음과 같습니다.

KeysView(ChainMap({'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'}))
ValuesView(ChainMap({'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'}))

프로그램 출력 결과에서 볼 수 있듯이 chain_map.keys()의 결과는 KeysView(키 뷰)이고, chain_map.values()의 결과는 ValuesView(값 보기)입니다. 이 두 가지 뷰 유형 내장 클래스는 각각 해당 키 이름과 값 객체를 순회할 수 있는 반복 가능한 객체입니다. 예:

Python 프로그래밍: 사전 체인 매핑(ChainMap)을 사용하는 또 다른 방법, 플레이해 보세요!

출력 결과는 다음과 같습니다.

key = a,value=A
key = b,value=B
key = one,value=1
key = two,value=2
链映射包含的值为:
A;B;1;2;

코드와 출력 결과를 결합하면 이해하기 쉽습니다. 즉, 체인 매핑은 여러 매핑을 패키지하는 것입니다(맵에는 많은 구현이 있고 사전은 하나입니다). 중)을 하나의 매핑, 즉 체인 매핑으로 변환하여 사전처럼 액세스할 수 있습니다. 예를 들어, 사전과 같은 특정 키 값에 액세스합니다:

print(chain_map['b'] )

즉, 키 이름: chain_map[' one ']을 사용하여 ChainMap의 기본 사전에 있는 단일 항목의 값에 액세스합니다.

ChainMap에 새 매핑 추가

Python 프로그래밍: 사전 체인 매핑(ChainMap)을 사용하는 또 다른 방법, 플레이해 보세요!ChainMap에는 원하는 수의 사전이 포함될 수 있습니다. 내장된 new_child() 메소드를 사용하여 ChainMap에 새 사전을 추가합니다. new_child() 메서드는 새 매핑과 그 뒤에 현재 인스턴스의 모든 매핑이 포함된 새 ChainMap을 반환합니다. 여기서 주목해야 할 점은 새로 추가된 사전이 ChainMap의 시작 부분에 배치된다는 것입니다. 예를 살펴보겠습니다.

프로그램을 실행하면 입력 결과는 다음과 같습니다.

Old: ChainMap({'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'})
New: ChainMap({'x': 0, 'y': 1}, {'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'})

这里需要注意的是,用链式映射的new_child()方法添加新字典后,不改变原来的链映射,会返回一个新的ChainMap对象。另外,如果你修改链式映射所包含的映射或字典,变化也将体现在链式映射对象中。

另外,实践中要当心:如果你按照字典操作来添加新的键值对,则该键值对会添加到链式映射所包含的第一个映射中,如:new_chain_map['X'] = 'Unkown' 。自己动手试试看。

所含映射有相同键怎么办?

底层上,链式映射主要是为把多个字典或映射打包成一个映射,以便集中操作。如果所办函的字典中有相同的键会怎样呢?来看示例:

Python 프로그래밍: 사전 체인 매핑(ChainMap)을 사용하는 또 다른 방법, 플레이해 보세요!

运行程序输出结果如下:

ChainMap({'id': 21001, 'country': '大秦', 'emperor': '嬴政'}, {'name': '李靖', 'country': '大唐', 'title': '元帅'})
大秦
('name', '李靖')
('country', '大秦')
('title', '元帅')
('id', 21001)
('emperor', '嬴政')

很显然,链接的映射中出现相同字典项时,只读取第一个,以第一个为准,而且当你更新一个键的值时,它也只是更新第一个映射内容的键值。

如果你想一次更新所有映射中的相同键的值怎么办呢?你可以自定义一个ChainMap子类来实现,或定义更新方法。因为ChainMap中有个属性maps持有完整的各个映射,可以基于此属性来完成相同键的一次性更新。这里简单给个通过方法的方式实现多映射相同键的一次更新。示例代码如下:

Python 프로그래밍: 사전 체인 매핑(ChainMap)을 사용하는 또 다른 방법, 플레이해 보세요!

当然,你可以写得更复杂一点,以完成更多的需要,也可实现一次多个映射中的相同键的值。自己动手试试吧。

本文小结

本文主要介绍了Python集合模块中的链式映射容器——ChainMap的使用,可以把多个字典打包成一个对象来操作。同时需要注意的是,该映射只是对原字典的引用,当你修改原字典时,相应的变化也为体现在链式映射中。同时,在为ChainMap新增新的键值对时,它会添加到所包含的第一个映射对象中。

위 내용은 Python 프로그래밍: 사전 체인 매핑(ChainMap)을 사용하는 또 다른 방법, 플레이해 보세요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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