Akashic Records

[추가자료] 2.2 변수와 자료형 딕셔너리(Dictionary) 함수들 본문

Python for Beginners

[추가자료] 2.2 변수와 자료형 딕셔너리(Dictionary) 함수들

Andrew's Akashic Records 2024. 5. 24. 15:42
728x90

 

파이썬에서 딕셔너리는 키(key)와 값(value)의 쌍을 저장하는 데 사용되는 자료형입니다. 딕셔너리는 중괄호 {}를 사용하여 생성하며, 각 키-값 쌍은 쉼표로 구분됩니다. 딕셔너리는 순서가 없으며, 키를 사용하여 값을 빠르게 검색할 수 있습니다.

다음은 파이썬 딕셔너리의 기본 사용 예시와 함께 간단한 설명입니다:

 

예시 코드 1: 딕셔너리 생성 및 접근

# 딕셔너리 생성
person = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

# 딕셔너리에서 값 접근
print("Name:", person["name"])  # John
print("Age:", person["age"])    # 30
print("City:", person["city"])  # New York

이 예시에서 person 딕셔너리는 세 개의 키-값 쌍을 가지고 있습니다. 값에 접근할 때는 대괄호 [] 안에 키를 넣어서 접근합니다.

 

예시 코드 2: 딕셔너리 수정, 추가, 삭제

# 값 수정
person["city"] = "Boston"

# 새 키-값 쌍 추가
person["job"] = "Engineer"

# 키-값 쌍 삭제
del person["age"]

print(person)  # {'name': 'John', 'city': 'Boston', 'job': 'Engineer'}

이 코드는 기존의 딕셔너리에 값 수정, 새로운 키-값 추가, 기존 키-값 삭제를 보여줍니다.

 

예시 코드 3: 딕셔너리 메소드 사용

# 모든 키 출력
print("Keys:", person.keys())

# 모든 값 출력
print("Values:", person.values())

# 모든 키-값 쌍 출력
print("Items:", person.items())

keys(), values(), items() 메소드를 사용하여 딕셔너리의 키, 값, 키-값 쌍을 볼 수 있습니다.

 

예시 코드 4: 딕셔너리 순회

# 모든 키-값 쌍을 순회하면서 출력
for key, value in person.items():
    print(f"{key}: {value}")

items() 메소드를 사용하여 딕셔너리의 모든 키-값 쌍을 순회할 수 있습니다. 이 메소드는 각 키-값 쌍을 튜플로 반환합니다.

 

예시 코드 5: 딕셔너리를 사용한 계산

이 예제에서는 딕셔너리에 저장된 값에 따라 계산을 수행합니다. 이를 통해 각 제품의 총 가격을 계산합니다.

# 제품과 가격, 수량을 담은 딕셔너리
products = {
    "apple": {"price": 0.75, "quantity": 5},
    "banana": {"price": 0.50, "quantity": 10},
    "orange": {"price": 0.65, "quantity": 7}
}

# 총 가격을 계산
total_price = sum(item['price'] * item['quantity'] for item in products.values())
print("Total price:", total_price)  # 예를 들어 총 가격 출력

 

예시 코드 6: 딕셔너리 내 조건에 따른 필터링

이 코드는 딕셔너리 내 특정 조건을 만족하는 요소만 추출하는 방법을 보여줍니다.

# 제품 중에서 가격이 0.60 이상인 것만 필터링
expensive_products = {key: val for key, val in products.items() if val['price'] >= 0.60}
print("Expensive products:", expensive_products)

 

예시 코드 7: 딕셔너리 업데이트

이 예제에서는 하나의 딕셔너리를 다른 딕셔너리로 업데이트하는 방법을 보여줍니다.

# 추가 정보
additional_info = {
    "banana": {"origin": "Ecuador"},
    "apple": {"origin": "USA"}
}

# 원래의 products 딕셔너리에 추가 정보 업데이트
for key, value in additional_info.items():
    if key in products:
        products[key].update(value)

print("Updated products:", products)

 

예시 코드 8: 딕셔너리로부터 새로운 딕셔너리 생성

이 예제에서는 기존 딕셔너리에서 새로운 딕셔너리를 생성하는 방법을 설명합니다.

# 가격 정보만 추출하여 새 딕셔너리 생성
price_info = {key: value['price'] for key, value in products.items()}
print("Price info:", price_info)

이러한 예시들은 딕셔너리를 사용하여 데이터를 다루는 다양한 방법을 보여주며, 파이썬에서 딕셔너리를 효과적으로 활용하는 방법을 제시합니다. 딕셔너리는 그 구조가 간단하면서도 매우 강력하므로, 다양한 데이터 처리 작업에서 중요한 역할을 할 수 있습니다.

 

리스트와 딕셔너리를 결합하여 사용하는 중첩(nesting) 구조는 데이터를 구조화하고 복잡한 정보를 표현하는 데 유용합니다. 다음 예시에서는 딕셔너리와 리스트를 중첩하여 사용하는 방법을 보여주며, 이를 통해 관계형 데이터를 관리하는 방법을 설명합니다.

 

예시 코드: 회사 직원과 부서 관리

이 예제에서는 회사의 여러 부서에 속한 직원들의 정보를 저장하고 관리하는 구조를 만듭니다.

# 회사 직원 목록을 관리하는 딕셔너리
company = {
    "Engineering": [
        {"name": "Alice", "position": "Software Engineer", "id": 1},
        {"name": "Bob", "position": "Hardware Engineer", "id": 2}
    ],
    "HR": [
        {"name": "Carol", "position": "HR Manager", "id": 3}
    ],
    "Marketing": [
        {"name": "David", "position": "Social Media Manager", "id": 4},
        {"name": "Eve", "position": "Content Creator", "id": 5}
    ]
}

# Engineering 부서의 직원 정보 출력
print("Engineering Department:")
for employee in company["Engineering"]:
    print(f"  Name: {employee['name']}, Position: {employee['position']}")

# Marketing 부서의 직원 정보 출력
print("Marketing Department:")
for employee in company["Marketing"]:
    print(f"  Name: {employee['name']}, Position: {employee['position']}")


# Engineering 부서에 새로운 직원 추가
company["Engineering"].append({"name": "Frank", "position": "DevOps Engineer", "id": 6})

# 변경 후 Engineering 부서의 직원 정보 출력
print("Engineering Department:")
for employee in company["Engineering"]:
    print(f"  Name: {employee['name']}, Position: {employee['position']}")

 

코드 설명:

  1. 데이터 구조: company 딕셔너리는 각 부서를 키로 하며, 각 키의 값은 해당 부서의 직원 정보를 담고 있는 리스트입니다. 각 직원은 다시 딕셔너리로 표현되어, 이름, 직위, ID 등의 정보를 포함합니다.
  2. 부서 정보 출력: print_department_info 함수는 특정 부서의 모든 직원 정보를 출력합니다. 부서명을 인수로 받아 해당 부서의 직원들을 순회하면서 정보를 출력합니다.
  3. 직원 추가: add_employee 함수는 새로운 직원을 특정 부서에 추가합니다. 이 함수는 부서명, 이름, 직위, ID를 인수로 받아 새로운 직원 정보를 해당 부서의 리스트에 추가합니다.

이러한 중첩 구조는 실제로 많은 애플리케이션에서 사용됩니다. 예를 들어, 관리 시스템, 데이터베이스 관리, API 응답 구조 등에서 볼 수 있습니다. 이 방법은 데이터 간의 계층적 관계를 명확히 표현할 수 있어 유용합니다.

 

전체 예제 코드

# 딕셔너리 생성
person = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

# 딕셔너리에서 값 접근
print("Name:", person["name"])  # John
print("Age:", person["age"])    # 30
print("City:", person["city"])  # New York


# 값 수정
person["city"] = "Boston"

# 새 키-값 쌍 추가
person["job"] = "Engineer"

# 키-값 쌍 삭제
del person["age"]

print(person)  # {'name': 'John', 'city': 'Boston', 'job': 'Engineer'}

# 모든 키 출력
print("Keys:", person.keys())

# 모든 값 출력
print("Values:", person.values())

# 모든 키-값 쌍 출력
print("Items:", person.items())

# 모든 키-값 쌍을 순회하면서 출력
for key, value in person.items():
    print(f"{key}: {value}")

print("\nNext Other examples")

# 제품과 가격, 수량을 담은 딕셔너리
products = {
    "apple": {"price": 0.75, "quantity": 5},
    "banana": {"price": 0.50, "quantity": 10},
    "orange": {"price": 0.65, "quantity": 7}
}

# 총 가격을 계산
total_price = sum(item['price'] * item['quantity'] for item in products.values())
print("Total price:", total_price)  # 예를 들어 총 가격 출력

# 제품 중에서 가격이 0.60 이상인 것만 필터링
expensive_products = {key: val for key, val in products.items() if val['price'] >= 0.60}
print("Expensive products:", expensive_products)


# 추가 정보
additional_info = {
    "banana": {"origin": "Ecuador"},
    "apple": {"origin": "USA"}
}

# 원래의 products 딕셔너리에 추가 정보 업데이트
for key, value in additional_info.items():
    if key in products:
        products[key].update(value)

print("Updated products:", products)

# 가격 정보만 추출하여 새 딕셔너리 생성
price_info = {key: value['price'] for key, value in products.items()}
print("Price info:", price_info)

print("\nNext Other examples")

# 회사 직원 목록을 관리하는 딕셔너리
company = {
    "Engineering": [
        {"name": "Alice", "position": "Software Engineer", "id": 1},
        {"name": "Bob", "position": "Hardware Engineer", "id": 2}
    ],
    "HR": [
        {"name": "Carol", "position": "HR Manager", "id": 3}
    ],
    "Marketing": [
        {"name": "David", "position": "Social Media Manager", "id": 4},
        {"name": "Eve", "position": "Content Creator", "id": 5}
    ]
}

# Engineering 부서의 직원 정보 출력
print("Engineering Department:")
for employee in company["Engineering"]:
    print(f"  Name: {employee['name']}, Position: {employee['position']}")

# Marketing 부서의 직원 정보 출력
print("Marketing Department:")
for employee in company["Marketing"]:
    print(f"  Name: {employee['name']}, Position: {employee['position']}")


# Engineering 부서에 새로운 직원 추가
company["Engineering"].append({"name": "Frank", "position": "DevOps Engineer", "id": 6})

# 변경 후 Engineering 부서의 직원 정보 출력
print("Engineering Department:")
for employee in company["Engineering"]:
    print(f"  Name: {employee['name']}, Position: {employee['position']}")
728x90
Comments