Python 언어 깊이 들어가기: 두 사전 대상의 공통 부분 (키,value, 또는 키,value 쌍) 을 신속하게 찾아내는 방법...

5085 단어
많은 경우에 우리는 여러 개의 목록이나 집합 대상의 공통 요소를 찾아야 한다.예를 들어 우리는 두 표준 목록 대상의 공통 요소나 두 표준 사전 대상의 키가 같은 요소를 구해야 할 수도 있다. 두 표준 사전 대상 중의 키와value는 모두 같은 요소이다.
구체적인 실제 업무에서, 예를 들어 우리는 사전으로 한 반에서 모든 학생의 모든 과정의 성적을 표시하고 각 학생이 배운 과정에 차이가 있다.우리는 두 학생이 모두 공부하고 있는 과목을 찾아내야 하는 상황에 직면하게 될 것이다.
 
가장 빠른 방법은 집합 조작 연산자를 사용하여 이 문제를 해결하는 것이다.
Python은 '&', '|', '-' 와 '^', 즉 교차, 합병, 차와 대칭 차 집합 네 가지 연산자를 제공합니다.
예를 들어 t, s는 두 개의 집합이고 이 네 가지 연산의 의미는 다음과 같다.
a = t | s # t와 s의 결합
b = t & s # t와 s의 교차
c = t – s # 구차 세트(항목은 t에 있지만 s에는 없음)
d = t ^ s # 대칭 차집(항목은 t 또는 s에 있지만 둘 다에 동시에 나타나지 않음)
 
우리의 예로 돌아가서 학생 a의 성적은 다음과 같다고 가정하자.
a = {
     " ":56,
     " ":66,
     " ":77,
     " ":88  
}

가령 학생 b의 성적은 다음과 같다.
b = {
     " ":56,
     " ":66,
     " ":78,
     " ":89  
}

1. 그들 둘 다 공부한 과목을 찾아내려면 키에 대한 교집 연산으로
common_class = a.keys()   & b.keys()
print('', common_class)
# : : {' ', ' ', ' '}

2. 그들 둘 중 한 사람만 배운 과목을 찾아내려면 키에 대한 대칭차 집합 연산으로
exclusive_class =  a.keys() ^ b.keys()
print(' ', exclusive_class)
#  :   {' ', ' '}

3. 모든 과목을 찾아내려면 키에 대해 병렬 연산을 하면 다음과 같다.
all_class =  a.keys() | b.keys()
print(' ', all_class )
#  :   {' ', ' ', ' ', ' ', ' '}

4. 만약에 학생 a가 공부한 과목을 찾아내고 b가 공부하지 않은 과목을 찾아내려면 키에 대해 차집 연산을 하면 다음과 같다.
only_class =  a.keys() -  b.keys()
print('a b ', only_class )
#  : a b  {' '}

 
이상의 예에서 알 수 있듯이 파이톤에서 사전의 키스 () 연산으로 생성된 키 집합은 하나의 집합 대상으로 간주된다.집합이 가지고 있는 관련 연산을 실행할 수 있다.이 몇 가지 연산은 목록 대상에 적용되지 않는다. 목록에 중복된 요소가 나타날 수 있기 때문에 집합과 완전히 다른 유형이기 때문에 파이톤은 디자인할 때 이런 연산을 지원할 필요가 없다.
 
위의 예에서 더 나아가 만약에 우리가 두 사전에서 완전히 같은 요소를 찾아내려면 집합 연산을 빌려 실현할 수도 있다.사전 대상에서 키처럼 모든 요소가 유일하기 때문이다.
5. 그들 둘 다 과목과 성적이 같은 항목을 찾아내려면items에 대한 교집 연산으로
common_class_score = a.items() & b.items()
print('', common_class_score)
#  : : {' ', ' ', ' '}

같은 이치로, 우리는 items ()에 대해 기타 세 가지 집합 연산을 실행할 수 있다.
 
 
마지막으로 사전의values (), 즉 사전의 값의 집합 (사전에서values () 연산을 실행한 결과) 은 집합 연산을 지원하지 않습니다.작은 연습으로 파이톤이 사전 대상values () 의 집합 연산을 지원하지 않는 이유를 독자 스스로 설명해 주십시오.
전재 대상:https://www.cnblogs.com/python-data-dev/articles/9863869.html

좋은 웹페이지 즐겨찾기