Lesson 11
사전
1. 사전
일반 목록 (배열)은 일반적으로 번호가 매겨진 요소 집합이므로 모든 목록 항목에 대한 참조를 만들려면 번호를 지정해야합니다. 목록의 요소 수는 항목 자체를 고유하게 식별합니다. 그러나 식별 번호가 항상 편리하지는 않습니다. 예를 들어, 러시아의 열차 노선은 식별 코드 (숫자 및 한자리 수)로 문자 및 숫자를 사용하며 숫자로 된 알파벳 코드는 항공편을 식별합니다. 즉, 항공편, 기차 또는 항공기 ID에 대한 정보는 숫자가 아니고 텍스트 문자열.
숫자가 아닌 임의의 유형의 색인을 사용할 수있는 자료 구조는 사전 또는 결합 배열 이라고 합니다 . 파이썬에서 상응하는 데이터 구조는 dict
라고 불린다.
간단한 예를 생각해보십시오. 사전 Capitals
. 여기서 index는 국가의 이름이고 value -이 나라의 수도 이름입니다. 이제 우리는 그 나라의 이름을 가진 행을 위해 쉽게 수도를 식별 할 수 있습니다.
# 빈 dict 대문자 만들기 Capitals = dict() # 일부 값으로 채우기 Capitals['Russia'] = 'Moscow' Capitals['Ukraine'] = 'Kiev' Capitals['USA'] = 'Washington' Countries = ['Russia', 'France', 'USA', 'Russia'] for country in Countries: # 목록에서 각 국가에 대해 그것이 사전에 있는지 확인하십시오. 수도 if country in Capitals: print('The capital of ' + country + ' is ' + Capitals[country]) else: print('The capital of ' + country + ' is unknown')
따라서 사전의 각 요소는 키 와 값 이라는 두 개의 객체로 구성 됩니다 . 우리의 예에서 key는 국가 이름이고 value는 자본의 이름입니다. 키는 사전의 요소를 식별하며, 값은 주어진 키에 해당하는 데이터입니다. 키 값은 고유합니다. 즉, 사전에 두 개의 동일한 키가있을 수 없습니다.
우리는 우리 주변의 사전, 일반적인 종이 사전 (정의, 단일 언어, 이중 언어)에 익숙합니다. 사전을 정의하기 위해 키는 단어 (기사 제목)이고 값은 기사 자체이며 기사에 액세스하려면 단어 키를 지정해야합니다.
전화 번호부는 사전 데이터 구조의 또 다른 예입니다. 이 경우 키는 이름이고 값은 전화 번호입니다. 사전과 전화 번호부 모두 주어진 키를 가진 사전 요소를 쉽게 찾을 수 있습니다 (예를 들어 레코드가 알파벳 순서로 저장되어 있으면 쉽게 이진 검색으로 키를 찾을 수 있습니다). 그러나 키가 알 수 없으며 값만 알면 지정된 값을 가진 요소를 검색 할 때 사전의 모든 요소에 대한 일관된 뷰가 필요할 수 있습니다.
연관 배열의 중요한 기능은 동적이라는 것입니다. 즉, 키를 사용하여 새 요소를 추가하고 기존 요소를 삭제할 수 있습니다. 사용 된 메모리 양은 연관 배열의 크기에 비례합니다. 연관 배열의 요소에 대한 액세스는 일반 배열보다 느리지 만 여전히 빠릅니다.
파이썬에서 키는 변경 불가능한 데이터 유형 (정수 및 실수, 문자열, 튜플) 일 수 있습니다. 사전의 키는 집합이 아니지만 frozenset
유형의 요소 일 수 있습니다. 즉, 작성한 후에 수정할 수없는 유형 set
의 특수 데이터 유형 아날로그입니다. 사전 요소 값은 수정 가능한 것을 포함하여 모든 데이터 유형이 될 수 있습니다.
2. 사전 적용
사전은 다음과 같은 경우에 사용됩니다.
Num['January'] = 1; Num['February'] = 2; ...
사전을 사용하여 할 수 있습니다 Num['January'] = 1; Num['February'] = 2; ...
빈 사전은 함수 dict()
또는 빈 중괄호 {}
쌍을 사용하여 만들 수 있습니다 (실제로 이것이 중괄호를 사용하여 빈 집합을 만들 수없는 이유입니다). 일부 초기 값 집합으로 사전을 만들려면 다음 구문을 사용할 수 있습니다.
Capitals = {'Russia': 'Moscow', 'Ukraine': 'Kiev', 'USA': 'Washington'} Capitals = dict(RA = 'Moscow', Ukraine = 'Kiev', USA = 'Washington') Capitals = dict([("Russia", "Moscow"), ("Ukraine", "Kiev"), ("USA", "Washington")]) Capitals = dict(zip(["Russia", "Ukraine", "USA"], ["Moscow", "Kiev", "Washington"])) print(Capitals)
처음 두 메서드는 모든 요소를 나열하여 작은 사전을 만드는 데에만 사용할 수 있습니다. 또한 두 번째 방법에서는 키가 dict
명명 된 매개 변수로 전달 dict
경우 키는 문자열 일 수 있으며 올바른 식별자 만 사용할 수 있습니다. 세 번째와 네 번째 경우에는 전송 된 인수가 모든 요소를 나열하는 것에서 만 얻을 수는 없지만 프로그램 실행 중에 다른 방식으로 작성된 기성 목록 인 경우 큰 사전을 만들 수 있습니다. 세 번째 방법에서 함수 dict
는 각 요소가 key와 value라는 두 요소의 튜플 인 목록을 수신해야합니다. 네 번째 메서드는 zip
함수를 사용합니다.이 함수는 길이가 같은 두 개의 목록 인 키 목록과 값 목록을 필요로합니다.
3. 사전 항목 작업
기본 조작 : 키를 사용하여 요소의 값을 가져옵니다. 목록과 똑같이 쓰여 있습니다 : A[key]
. 사전에 지정된 키가있는 요소가 없으면 KeyError
예외가 발생합니다.
키를 기반으로 값을 정의하는 또 다른 방법은 get
: A.get(key)
메소드입니다. 키 get
있는 요소가 사전에 없으면 None
을 반환합니다. 두 개의 인수가있는 형식 A.get(key, val)
메서드는 키 key
가있는 요소가 사전에 없으면 val
반환합니다.
요소가 사전에 속하는지 여부를 확인하려면 in
및 not in
연산자가 사용됩니다.
사전에 새 항목을 추가하려면 값을 지정해야합니다. A[key] = value
.
사전에서 항목을 제거하려면 del A[key]
사용할 수 있습니다 (사전에 해당 키가 없으면 작업에서 예외 KeyError
가 발생합니다.) 다음은 사전에서 항목을 제거하는 두 가지 안전한 방법입니다.
A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'} key = 'ac' if key in A: del A[key] try: del A[key] except KeyError: print('There is no element with key "' + key + '" in dict') print(A)
첫 번째 경우에는 요소의 존재 여부를 사전에 확인한 다음 예외를 처리합니다.
사전에서 항목을 제거하는 또 다른 방법은 pop
: A.pop(key)
입니다. 이 메서드는 제거 된 요소의 값을 반환하고 지정된 키가있는 요소가 사전에 없으면 예외가 발생합니다. 메서드 pop
이 누락 된 요소보다 두 번째 매개 변수를받는 경우이 매개 변수의 값을 반환합니다. 사전에서 요소 제거를 안전하게 구성 할 수 있습니다. A.pop(key, None)
.
4. 반복 사전
사전에있는 모든 항목의 키를 사용하여 쉽게 반복 할 수 있습니다.
A = dict(zip('abcdef', list(range(6)))) for key in A: print(key, A[key])
다음 메소드는 사전 요소의 표현 을 리턴합니다. 표현은 세트와 유사하지만 요소의 값을 변경하면 변경됩니다. 방법 keys
모든 요소의 키의 표현은, 반환 values
모든 값의 표시를 반환하고, 상기 방법의 items
키와 값의 모든 쌍 (튜플)의 표시를 리턴한다.
따라서 값 val
이 사전 A
의 모든 값 중 하나인지 빠르게 확인하려면 val in A.values()
부울 조건 val in A.values()
합니다. 키와 변수를 반복하려면 다음을 수행하십시오.
A = dict(zip('abcdef', list(range(6)))) for key, val in A.items(): print(key, val)