>  기사  >  백엔드 개발  >  Python 여러 사전 병합 또는 매핑 튜토리얼

Python 여러 사전 병합 또는 매핑 튜토리얼

Guanhui
Guanhui앞으로
2020-07-24 17:33:382869검색

Python 여러 사전 병합 또는 매핑 튜토리얼

Problem

이제 여러 사전이나 맵이 있는데 이를 논리적으로 단일 맵으로 병합한 다음 값을 조회하거나 특정 키가 존재하는지 확인하는 등의 특정 작업을 수행하려고 합니다.

Solution

Join에는 다음 두 개의 사전이 있습니다.

a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }

이제 두 개의 사전에서 검색 작업을 수행해야 한다고 가정합니다(예: 첫 번째 사전에서 검색한 다음 찾지 못한 경우 b에서 검색). ). 매우 간단한 해결책은 컬렉션 모듈의 ChainMap 클래스를 사용하는 것입니다. 예:

from collections import ChainMap
c = ChainMap(a,b)
print(c['x']) # Outputs 1 (from a)
print(c['y']) # Outputs 2 (from b)
print(c['z']) # Outputs 3 (from a)

Discuss

A ChainMap은 여러 사전을 허용하고 논리적으로 하나의 사전으로 변환합니다. 그러나 이러한 사전은 실제로 함께 병합되지 않습니다. ChainMap 클래스는 이러한 사전을 보유하기 위해 내부적으로 목록을 생성하고 이 목록을 탐색하기 위해 몇 가지 일반적인 사전 작업을 재정의합니다. 대부분의 사전 작업은 다음과 같이 정상적으로 사용할 수 있습니다.

>>> len(c)
3
>>> list(c.keys())
['x', 'y', 'z']
>>> list(c.values())
[1, 2, 3]
>>>

중복 키가 있는 경우 매핑된 값이 처음으로 나타나는 것이 반환됩니다. 따라서 예제 프로그램의 c['z']는 항상 b의 해당 값이 아닌 사전 a의 해당 값을 반환합니다.

사전을 업데이트하거나 삭제하면 항상 목록의 첫 번째 사전에 영향을 미칩니다. 예:

>>> c['z'] = 10
>>> c['w'] = 40
>>> del c['x']
>>> a
{'w': 40, 'z': 10}
>>> del c['y']
Traceback (most recent call last):
...
KeyError: "Key not found in the first mapping: 'y'"
>>>

ChainMap은 프로그래밍 언어의 범위 변수(예: 전역, 지역 등)에 매우 유용합니다. 실제로 이를 쉽게 만드는 방법이 있습니다:

>>> values = ChainMap()
>>> values['x'] = 1
>>> # Add a new mapping
>>> values = values.new_child()
>>> values['x'] = 2
>>> # Add a new mapping
>>> values = values.new_child()
>>> values['x'] = 3
>>> values
ChainMap({'x': 3}, {'x': 2}, {'x': 1})
>>> values['x']
3
>>> # Discard last mapping
>>> values = values.parents
>>> values['x']
2
>>> # Discard last mapping
>>> values = values.parents
>>> values['x']
1
>>> values
ChainMap({'x': 1})
>>>

ChainMap의 대안으로 update() 메서드를 사용하여 두 사전을 병합하는 것을 고려할 수 있습니다. 예:

>>> a = {'x': 1, 'z': 3 }
>>> b = {'y': 2, 'z': 4 }
>>> merged = dict(b)
>>> merged.update(a)
>>> merged['x']
1
>>> merged['y']
2
>>> merged['z']
3
>>>

이 방법도 작동하지만 완전히 다른 사전 개체를 생성해야 합니다(또는 기존 사전 구조를 파괴해야 합니다). 동시에 원본 사전이 업데이트되면 이 변경 사항은 새로 병합된 사전에 반영되지 않습니다. 예:

>>> a['x'] = 13
>>> merged['x']
1

ChianMap은 원래 사전을 사용하며 자체적으로 새 사전을 생성하지 않습니다. 따라서 위에서 언급한 다음과 같은 결과가 생성되지 않습니다.

>>> a = {'x': 1, 'z': 3 }
>>> b = {'y': 2, 'z': 4 }
>>> merged = ChainMap(a, b)
>>> merged['x']
1
>>> a['x'] = 42
>>> merged['x'] # Notice change to merged dicts
42
>>>

권장 튜토리얼: "Python Tutorial"

위 내용은 Python 여러 사전 병합 또는 매핑 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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