5 분 소요

Dictionary(Map) 소개

Dictionary(Map)의 개념과 특징

파이썬의 Dictionary는 key와 value의 쌍으로 이루어진 데이터 구조입니다. 이러한 형식은 매핑(mapping) 형태로, 특정 key를 통해 대응되는 value에 접근할 수 있습니다.

my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}

print(my_dict['apple'])  # 출력: 1

Dictionary의 주요 특징 중 하나는 key를 통해 데이터에 빠르게 접근할 수 있다는 점입니다.또한, key는 변경 불가능(immutable)한 데이터 타입만 사용할 수 있으며, 각 key는 고유해야 합니다. value는 어떠한 데이터 타입도 가능하며, 중복이 허용됩니다.


Dictionary(Map)과 List/Array의 비교

List와 Array는 순서가 있는(ordered) 데이터 구조이며, 인덱스를 통해 각 요소에 접근합니다. 반면, Dictionary는 순서가 없는(unordered) 데이터 구조로, key를 통해 value에 접근합니다.

따라서, List와 Array는 데이터의 순서가 중요하거나, 인덱스를 통한 접근이 필요한 경우 사용됩니다. Dictionary는 key-value 관계를 가진 데이터를 저장하고 처리하는데 적합합니다.


Dictionary(Map) 기본 동작

Dictionary의 생성과 초기화 방법

Dictionary는 중괄호({}) 안에 key-value 쌍을 콜론(:)으로 연결하여 초기화합니다.

# 빈 dictionary 생성
my_dict = {}

# key-value 쌍을 가진 dictionary 생성
my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
print(my_dict)
#출력: {'apple': 1, 'banana': 2, 'cherry': 3}

Dictionary의 요소 접근 방법과 수정

Dictionary의 요소는 key를 통해 접근합니다.

my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}
print(my_dict['apple'])  # 출력: 1

또한, 존재하는 key의 value를 변경하거나 새로운 key-value 쌍을 추가할 수 있습니다.

my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}

# value 변경
my_dict['apple'] = 4
print(my_dict)  # 출력: {'apple': 4, 'banana': 2, 'cherry': 3}

# 새로운 key-value 추가
my_dict['mango'] = 5
print(my_dict)  # 출력: {'apple': 4, 'banana': 2, 'cherry': 3, 'mango': 5}

Dictionary의 크기와 요소 삭제

len() 함수를 사용하여 Dictionary의 크기(즉, key-value 쌍의 개수)를 알 수 있습니다.

my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}

print(len(my_dict))  # 출력: 3

del 키워드나 pop() 메서드를 사용하여 Dictionary의 요소를 삭제할 수 있습니다.

코드텍스트

my_dict = {'apple': 1, 'banana': 2, 'cherry': 3}

# del 키워드를 사용한 요소 삭제
del my_dict['apple']
print(my_dict)  # 출력: {'banana': 2, 'cherry': 3}

# pop() 메서드를 사용한 요소 삭제
my_dict.pop('banana')
print(my_dict)  # 출력: {'cherry': 3}

Dictionary (Map)의 활용

Dictionary를 활용한 키-값 쌍 추가 및 조회

Dictionary에 새로운 키-값 쌍을 추가하는 방법은 간단합니다. 새로운 키를 지정하고 해당 키에 값을 할당하면 됩니다.

my_dict = {'apple': 1, 'banana': 2}

my_dict['cherry'] = 3
print(my_dict)  # 출력: {'apple': 1, 'banana': 2, 'cherry': 3}

Dictionary의 키를 이용하여 해당 키에 대응하는 값을 조회할 수 있습니다.

my_dict = {'apple': 1, 'banana': 2}

print(my_dict['banana'])  # 출력: 2

Dictionary의 반복문 활용

Dictionary는 키-값 쌍으로 이루어져 있어서, 이를 반복문에서 활용할 수 있습니다. 반복문을 통해 Dictionary의 모든 키-값 쌍에 접근하고 작업을 수행할 수 있습니다.

# 키만 사용하는 경우
for key in my_dict:
    print(my_dict[key])
    print(key)

# 출력:
# 1
# 2
# 3
# apple
# banana
# cherry

# 키와 값을 함께 사용하는 경우
for key, value in my_dict.items():
    print(key, value)

# 출력:
# apple 1
# banana 2
# cherry 3


Set

Set의 개념과 특징

Set은 파이썬에서 제공하는 기본적인 자료형 중 하나입니다. 이름에서도 알 수 있듯이, Set은 수학에서의 집합과 유사한 개념을 가지고 있습니다.

Set은 다음과 같은 특징을 가지고 있습니다.

  • 중복된 요소를 가질 수 없습니다. 각 요소는 유일(unique)해야 합니다.
  • Set은 순서가 없습니다. 즉, 인덱스로 요소에 접근할 수 없습니다.
  • Set은 변경 가능(mutable)합니다. 요소의 추가 또는 삭제가 가능합니다.
# Set의 생성
list = [1, 2, 3, 4, 5, 5, 5, 5, 2, 2, 1, 1, 0]
set1 = set(list)
my_set_ = {1, 2, 3, 4, 5, 0}

my_set = {1, 2, 3, 3, 3}
print(my_set)  # 출력: {1, 2, 3}

Set과 List/Array의 차이점

Set과 List/Array는 다음과 같은 주요 차이점을 가지고 있습니다:

  • 중복 요소: List/Array는 중복된 요소를 허용하지만, Set은 중복된 요소를 허용하지 않습니다.
  • 순서: List/Array는 요소의 순서를 유지하지만, Set은 순서가 없습니다.
  • 접근 방식: List/Array는 인덱스를 통해 요소에 접근할 수 있지만, Set은 인덱스로 접근할 수 없습니다.

이처럼 Set은 그 특성 상, 중복을 허용하지 않는 데이터의 모임을 다룰 때 효과적입니다. 다음 섹션에서는 Set의 기본적인 연산에 대해 알아보겠습니다.

Set 기본 동작

Set의 생성과 초기화 방법

Set은 중괄호 {} 또는 set() 함수를 사용해 생성할 수 있습니다. 빈 Set를 생성하려면 set()을 사용해야 합니다. {}만 사용하면, 이는 빈 Dictionary를 생성하게 됩니다.

# Set 생성
my_set = {1, 2, 3}
print(my_set)  # 출력: {1, 2, 3}

# 빈 Set 생성
empty_set = set()
print(empty_set)  # 출력: set()

Set에 요소 추가, 삭제

Set에 요소를 추가하려면 add() 메서드를, 여러 요소를 추가하려면 update() 메서드를 사용합니다. 요소를 삭제하려면 remove() 또는 discard() 메서드를 사용합니다.

my_set = {1, 2, 3}

# 요소 추가
my_set.add(4)
print(my_set)  # 출력: {1, 2, 3, 4}

# 여러 요소 추가
my_set.update({5, 6})
print(my_set)  # 출력: {1, 2, 3, 4, 5, 6}

# 요소 삭제
my_set.remove(1)
print(my_set)  # 출력: {2, 3, 4, 5, 6}

Set의 크기와 중복 요소 제거

Set의 크기는 len() 함수를 사용해 확인할 수 있습니다. 또한, Set은 자동으로 중복된 요소를 제거하기 때문에, 중복 요소를 제거하려면 List나 Array를 Set으로 변환하면 됩니다.

my_set = {2, 3, 4, 5, 6}

# Set 크기 확인
print(len(my_set))  # 출력: 5

# 중복 요소 제거
my_list = [1, 2, 2, 3, 4, 4, 4, 5, 6, 6]
my_set = set(my_list)
print(my_set)  # 출력: {1, 2, 3, 4, 5, 6}

Set의 활용

Set을 활용한 중복 요소 제거

Set은 중복된 요소를 가질 수 없으므로, List나 Array에서 중복 요소를 제거하는데 아주 유용합니다.

# List에 중복 요소가 있는 경우
my_list = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
# 이를 Set으로 변환하면 중복 요소가 제거됩니다.
my_set = set(my_list)
print(my_set)  # 출력: {1, 2, 3, 4}

Set을 활용한 교집합, 합집합, 차집합 연산

Set은 교집합, 합집합, 차집합 등의 집합 연산을 지원합니다. 이는 각각 intersection(), union(), difference() 메서드를 통해 수행할 수 있습니다.

# 두 Set의 선언
set_A = {1, 2, 3, 4}
set_B = {3, 4, 5, 6}

# 교집합
print(set_A.intersection(set_B))  # 출력: {3, 4}

# 합집합
print(set_A.union(set_B))  # 출력: {1, 2, 3, 4, 5, 6}

# 차집합
print(set_A.difference(set_B))  # 출력: {1, 2}

실전 응용 예시

문자열 내의 중복 문자

주어진 문자열에서 중복된 문자를 찾는 문제입니다. 이를 위해 우리는 Set과 Dictionary를 조합해 사용할 것입니다.

def find_duplicates(s):
    duplicates = set()
    counts = {}
    for letter in s:
        if letter in counts and counts[letter] == 1:
            duplicates.add(letter)
        counts[letter] = counts.get(letter, 0) + 1
    return duplicates


    for letter in s:
        duplicates.add(letter)
    return duplicates

print(find_duplicates("hello world"))  # 출력: {'h', 'l', 'o'}

모든 학생의 성적 계산

Dictionary와 List를 이용해 학생들의 성적을 계산하는 문제를 살펴보겠습니다. 각 학생의 이름을 키로, 그들의 성적을 값으로 하는 Dictionary를 사용하면 편리합니다.

def calculate_average_grades(grades):
    averages = {}
    for student, grades in grades.items():
        averages[student] = sum(grades) / len(grades)
    return averages

grades = {"John": [85, 90, 78], "Sarah": [92, 88, 90], "Mike": [70, 80, 75]}
print(calculate_average_grades(grades))  # 출력: {'John': 84.33333333333333, 'Sarah': 90.0, 'Mike': 75.0}

공통 요소 찾기

두 리스트에서 공통 요소를 찾는 문제를 살펴보겠습니다. 이를 위해 Set의 교집합 연산을 활용할 수 있습니다.

def find_common_elements(list1, list2):
    return set(list1).intersection(list2)

print(find_common_elements([1, 2, 3, 4], [3, 4, 5, 6]))  # 출력: {3, 4}

순서가 있는 딕셔너리 비교

from collections import OrderedDict

# 기본 딕셔너리
dict_a = {'a': 'apple', 'b': 'banana', 'p': 'pineapple'}
dict_b = {'b': 'banana', 'a': 'apple', 'p': 'pineapple'}
dict_a == dict_b
# True

OrderedDict
ordered_a = OrderedDict([('a', 'apple'), ('b', 'banana'), ('p', 'pineapple')])
ordered_b = OrderedDict([('b', 'banana'), ('a', 'apple'), ('p', 'pineapple')])

ordered_a == ordered_b
# False

기본 딕셔너리는 순서가 없습니다. 그래서 순서와 상관없이 Key와 Value 쌍이 동일하면 같다고 인식합니다. OrderedDict는 보통 Dictionary와 동일하지만 순서를 가지고 있습니다.

업데이트:

댓글남기기