소개
이 튜토리얼에서는 Python 에서 람다 함수를 사용하여 딕셔너리 값을 업데이트하는 방법을 살펴보겠습니다. 람다 함수는 딕셔너리로 작업할 때 코드를 더 간결하고 읽기 쉽게 만들어주는 소형 익명 함수입니다. 이 가이드가 끝나면, Python 프로그램에서 딕셔너리 연산을 간소화하기 위해 이러한 강력한 도구를 사용하는 방법을 이해하게 될 것입니다.
람다 함수 시작하기
이 단계에서는 람다 함수가 무엇인지, 그리고 Python 에서 어떻게 생성하는지 배우겠습니다.
람다 함수란 무엇인가요?
람다 함수는 lambda 키워드로 정의된 작고 익명적인 함수입니다. def 키워드로 선언된 일반 함수와 달리, 람다 함수는 한 줄로 작성할 수 있으며 이름을 가질 필요가 없습니다. 빠르게 수행해야 하는 간단한 연산에 완벽합니다.
람다 함수의 기본 구문은 다음과 같습니다.
lambda arguments: expression
여기서 arguments는 함수의 입력이고, expression은 결과를 생성하는 연산입니다.
첫 번째 람다 함수 만들기
간단한 람다 함수를 만들고 어떻게 작동하는지 살펴보겠습니다. 상단 메뉴 바에서 "File" > "New File"을 클릭하여 코드 편집기에서 새 Python 파일을 엽니다. 파일 이름을 lambda_basics.py로 지정하고 /home/labex/project 디렉토리에 저장합니다.
다음 코드를 파일에 추가합니다.
## 일반 함수 정의
def add_numbers(x, y):
return x + y
## 람다로 표현한 동일한 함수
add_lambda = lambda x, y: x + y
## 두 함수 테스트
print("Regular function result:", add_numbers(5, 3))
print("Lambda function result:", add_lambda(5, 3))
터미널을 열고 (아직 열려 있지 않은 경우) 다음을 실행하여 코드를 실행합니다.
python3 lambda_basics.py
다음 출력을 볼 수 있습니다.
Regular function result: 8
Lambda function result: 8
두 함수 모두 동일한 연산을 수행하지만, 람다 버전이 더 간결합니다.
람다 함수를 언제 사용해야 할까요?
람다 함수는 다음과 같은 상황에서 가장 유용합니다.
- 짧은 기간 동안 간단한 함수가 필요할 때
- 다른 함수에 인수로 함수를 전달하려는 경우
- 컬렉션의 항목에 간단한 연산을 적용해야 할 때
다른 예를 살펴보겠습니다. lambda_basics.py 파일에 다음 코드를 추가합니다.
## 내장 함수와 함께 람다 사용
numbers = [1, 2, 3, 4, 5]
## 람다를 사용하여 각 숫자 제곱
squared = list(map(lambda x: x**2, numbers))
## 람다를 사용하여 짝수 필터링
evens = list(filter(lambda x: x % 2 == 0, numbers))
print("Original numbers:", numbers)
print("Squared numbers:", squared)
print("Even numbers:", evens)
파일을 다시 실행합니다.
python3 lambda_basics.py
이제 출력에 다음이 포함됩니다.
Original numbers: [1, 2, 3, 4, 5]
Squared numbers: [1, 4, 9, 16, 25]
Even numbers: [2, 4]
이 예제에서는 map 및 filter 내장 함수와 함께 람다 함수를 사용하여 숫자 목록을 변환하고 필터링했습니다. 이러한 종류의 연산은 다음 단계에서 딕셔너리로 작업할 때 유용합니다.
Python 딕셔너리 이해하기
딕셔너리와 함께 람다 함수를 사용하기 전에, Python 에서 딕셔너리가 어떻게 작동하는지 확실히 이해하도록 합시다.
딕셔너리란 무엇인가요?
딕셔너리는 키 - 값 쌍의 모음입니다. 각 키는 값에 연결되어 있어, 키를 알고 있으면 값을 빠르게 액세스할 수 있습니다. 딕셔너리는 변경 가능 (mutable) 하므로, 딕셔너리가 생성된 후 항목을 변경, 추가 또는 제거할 수 있습니다.
딕셔너리 생성 및 액세스
/home/labex/project 디렉토리에 dictionary_basics.py라는 새 파일을 만들고 다음 코드를 추가해 보겠습니다.
## 딕셔너리 생성
product_prices = {
'apple': 1.50,
'banana': 0.75,
'orange': 1.20,
'grapes': 2.50
}
## 딕셔너리 값 액세스
print("Price of apple:", product_prices['apple'])
## 새 항목 추가
product_prices['watermelon'] = 3.75
print("Updated dictionary:", product_prices)
## 기존 항목 수정
product_prices['banana'] = 0.85
print("After modification:", product_prices)
## 딕셔너리 반복
print("\nAll products and their prices:")
for product, price in product_prices.items():
print(f"{product}: ${price:.2f}")
파일을 실행합니다.
python3 dictionary_basics.py
다음과 유사한 출력을 볼 수 있습니다.
Price of apple: 1.5
Updated dictionary: {'apple': 1.5, 'banana': 0.85, 'orange': 1.2, 'grapes': 2.5, 'watermelon': 3.75}
After modification: {'apple': 1.5, 'banana': 0.85, 'orange': 1.2, 'grapes': 2.5, 'watermelon': 3.75}
All products and their prices:
apple: $1.50
banana: $0.85
orange: $1.20
grapes: $2.50
watermelon: $3.75
딕셔너리 메서드 사용하기
딕셔너리에는 몇 가지 유용한 메서드가 있습니다. dictionary_basics.py 파일에 다음 코드를 추가해 보겠습니다.
## 딕셔너리 메서드
print("\nDictionary Methods:")
print("Keys:", list(product_prices.keys()))
print("Values:", list(product_prices.values()))
print("Items:", list(product_prices.items()))
## 키가 존재하는지 확인
if 'apple' in product_prices:
print("Apple is in the dictionary")
## 키가 존재하지 않는 경우 기본값으로 값 가져오기
price = product_prices.get('pineapple', 'Not available')
print("Price of pineapple:", price)
파일을 다시 실행합니다.
python3 dictionary_basics.py
추가 출력을 볼 수 있습니다.
Dictionary Methods:
Keys: ['apple', 'banana', 'orange', 'grapes', 'watermelon']
Values: [1.5, 0.85, 1.2, 2.5, 3.75]
Items: [('apple', 1.5), ('banana', 0.85), ('orange', 1.2), ('grapes', 2.5), ('watermelon', 3.75)]
Apple is in the dictionary
Price of pineapple: Not available
이제 람다 함수와 딕셔너리를 모두 이해했으므로, 다음 단계에서 이를 결합할 준비가 되었습니다.
람다 함수를 사용하여 딕셔너리 값 업데이트하기
이제 람다 함수와 딕셔너리를 모두 이해했으므로, 람다 함수를 사용하여 딕셔너리 값을 업데이트하는 방법을 살펴보겠습니다.
람다를 사용한 기본 딕셔너리 업데이트
/home/labex/project 디렉토리에 update_dictionaries.py라는 새 파일을 만들고 다음 코드를 추가해 보겠습니다.
## 제품 가격 딕셔너리 생성
prices = {
'apple': 1.50,
'banana': 0.75,
'orange': 1.20,
'grapes': 2.50
}
print("Original prices:", prices)
## 람다 및 딕셔너리 컴프리헨션을 사용하여 모든 가격에 10% 할인 적용
discounted_prices = {item: round(price * 0.9, 2) for item, price in prices.items()}
print("Prices after 10% discount:", discounted_prices)
## 다른 방법: map() 및 람다 사용
## 먼저, map 을 적용하는 함수를 만들어 봅시다.
def apply_to_dict(func, dictionary):
return dict(map(func, dictionary.items()))
## 이제 함수와 람다를 사용하여 20% 인상 적용
increased_prices = apply_to_dict(lambda item: (item[0], round(item[1] * 1.2, 2)), prices)
print("Prices after 20% increase:", increased_prices)
파일을 실행합니다.
python3 update_dictionaries.py
다음과 유사한 출력을 볼 수 있습니다.
Original prices: {'apple': 1.5, 'banana': 0.75, 'orange': 1.2, 'grapes': 2.5}
Prices after 10% discount: {'apple': 1.35, 'banana': 0.68, 'orange': 1.08, 'grapes': 2.25}
Prices after 20% increase: {'apple': 1.8, 'banana': 0.9, 'orange': 1.44, 'grapes': 3.0}
무슨 일이 일어났는지 자세히 살펴보겠습니다.
- 제품 가격 딕셔너리를 만들었습니다.
- 10% 할인을 적용하기 위해 간단한 계산과 함께 딕셔너리 컴프리헨션을 사용했습니다.
map()을 사용하고 결과를 다시 딕셔너리로 변환하는 도우미 함수apply_to_dict를 만들었습니다.- 이 함수를 람다와 함께 사용하여 20% 가격 인상을 적용했습니다.
람다 함수를 사용한 조건부 업데이트
이제 딕셔너리 값을 조건부로 업데이트해 보겠습니다. update_dictionaries.py 파일에 다음 코드를 추가합니다.
print("\n--- Conditional Updates ---")
## 다른 할인 적용: 1.00 달러 초과 품목에 15%, 나머지에 5%
varied_discount = {
item: round(price * 0.85, 2) if price > 1.00 else round(price * 0.95, 2)
for item, price in prices.items()
}
print("Varied discounts:", varied_discount)
## filter 와 람다를 사용하여 특정 항목만 업데이트
def update_filtered_items(dictionary, filter_func, update_func):
## 먼저, 항목을 필터링합니다.
filtered = dict(filter(filter_func, dictionary.items()))
## 그런 다음, 필터링된 항목을 업데이트합니다.
updated = {key: update_func(value) for key, value in filtered.items()}
## 원래 딕셔너리와 병합 (필터링된 항목만 업데이트)
result = dictionary.copy()
result.update(updated)
return result
## 'a'로 시작하는 과일에만 50% 할인 적용
special_discount = update_filtered_items(
prices,
lambda item: item[0].startswith('a'),
lambda price: round(price * 0.5, 2)
)
print("Special discount on items starting with 'a':", special_discount)
파일을 다시 실행합니다.
python3 update_dictionaries.py
이제 추가 출력을 볼 수 있습니다.
--- Conditional Updates ---
Varied discounts: {'apple': 1.28, 'banana': 0.71, 'orange': 1.02, 'grapes': 2.12}
Special discount on items starting with 'a': {'apple': 0.75, 'banana': 0.75, 'orange': 1.2, 'grapes': 2.5}
이 예제에서:
- 가격에 따라 다른 할인율을 적용하기 위해 딕셔너리 컴프리헨션에서 조건부 표현식을 사용했습니다.
- 람다 함수를 사용하여 항목을 필터링한 다음, 다른 람다 함수로 필터링된 항목만 업데이트하는 함수를 만들었습니다.
- 이 함수를 적용하여 'a'로 시작하는 제품에만 50% 할인을 제공했습니다.
이러한 예제는 람다 함수가 Python 의 map() 및 filter()와 같은 내장 함수와 결합될 때 딕셔너리 업데이트를 더 간결하고 읽기 쉽게 만들 수 있음을 보여줍니다.
고급 응용: 딕셔너리 정렬 및 변환
딕셔너리 데이터를 정렬하고 변환하는 데 중점을 두고 람다 함수를 사용한 몇 가지 더 고급 응용 프로그램을 살펴보겠습니다.
람다 함수를 사용한 딕셔너리 정렬
Python 의 딕셔너리는 기본적으로 정렬되지 않지만, 때로는 특정 순서로 처리해야 합니다. /home/labex/project 디렉토리에 advanced_dictionary_ops.py라는 새 파일을 만들고 다음 코드를 추가해 보겠습니다.
## 학생 점수 딕셔너리 생성
student_scores = {
'Alice': 92,
'Bob': 85,
'Charlie': 78,
'David': 95,
'Eva': 88
}
print("Original student scores:", student_scores)
## 학생 이름 (키) 으로 정렬
sorted_by_name = dict(sorted(student_scores.items()))
print("\nSorted by name:", sorted_by_name)
## 점수 (값) 를 오름차순으로 정렬
sorted_by_score_asc = dict(sorted(student_scores.items(), key=lambda item: item[1]))
print("\nSorted by score (ascending):", sorted_by_score_asc)
## 점수 (값) 를 내림차순으로 정렬
sorted_by_score_desc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=True))
print("\nSorted by score (descending):", sorted_by_score_desc)
## 점수 상위 3 명의 학생 가져오기
top_3_students = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=True)[:3])
print("\nTop 3 students:", top_3_students)
파일을 실행합니다.
python3 advanced_dictionary_ops.py
다음과 유사한 출력을 볼 수 있습니다.
Original student scores: {'Alice': 92, 'Bob': 85, 'Charlie': 78, 'David': 95, 'Eva': 88}
Sorted by name: {'Alice': 92, 'Bob': 85, 'Charlie': 78, 'David': 95, 'Eva': 88}
Sorted by score (ascending): {'Charlie': 78, 'Bob': 85, 'Eva': 88, 'Alice': 92, 'David': 95}
Sorted by score (descending): {'David': 95, 'Alice': 92, 'Eva': 88, 'Bob': 85, 'Charlie': 78}
Top 3 students: {'David': 95, 'Alice': 92, 'Eva': 88}
이 예제에서는 sorted() 함수를 람다 함수와 함께 사용하여 딕셔너리를 다양한 방식으로 정렬했습니다.
- 키 (학생 이름) 별로
- 값 (점수) 을 오름차순으로
- 값 (점수) 을 내림차순으로
또한 슬라이싱 [:3]을 사용하여 정렬 후 상위 3 명의 학생만 가져왔습니다.
딕셔너리 값 변환
이제 딕셔너리의 값을 변환하는 방법을 살펴보겠습니다. advanced_dictionary_ops.py 파일에 다음 코드를 추가합니다.
print("\n--- Transforming Dictionary Values ---")
## 섭씨 온도 딕셔너리 생성
celsius_temps = {
'New York': 21,
'London': 18,
'Tokyo': 26,
'Sydney': 22,
'Moscow': 14
}
print("Temperatures in Celsius:", celsius_temps)
## 섭씨를 화씨로 변환: F = C * 9/5 + 32
fahrenheit_temps = {city: round(temp * 9/5 + 32, 1) for city, temp in celsius_temps.items()}
print("Temperatures in Fahrenheit:", fahrenheit_temps)
## 온도를 시원함, 보통, 따뜻함으로 분류
def categorize_temp(temp):
if temp < 18:
return "Cool"
elif temp < 25:
return "Moderate"
else:
return "Warm"
categorized_temps = {city: categorize_temp(temp) for city, temp in celsius_temps.items()}
print("Categorized temperatures:", categorized_temps)
## 람다와 reduce 를 사용하여 온도 범주별로 도시 그룹화
from collections import defaultdict
from functools import reduce
grouped_cities = reduce(
lambda result, item: result[categorize_temp(item[1])].append(item[0]) or result,
celsius_temps.items(),
defaultdict(list)
)
print("\nCities grouped by temperature category:")
for category, cities in grouped_cities.items():
print(f"{category}: {', '.join(cities)}")
파일을 다시 실행합니다.
python3 advanced_dictionary_ops.py
이제 추가 출력을 볼 수 있습니다.
--- Transforming Dictionary Values ---
Temperatures in Celsius: {'New York': 21, 'London': 18, 'Tokyo': 26, 'Sydney': 22, 'Moscow': 14}
Temperatures in Fahrenheit: {'New York': 69.8, 'London': 64.4, 'Tokyo': 78.8, 'Sydney': 71.6, 'Moscow': 57.2}
Categorized temperatures: {'New York': 'Moderate', 'London': 'Moderate', 'Tokyo': 'Warm', 'Sydney': 'Moderate', 'Moscow': 'Cool'}
Cities grouped by temperature category:
Cool: Moscow
Moderate: New York, London, Sydney
Warm: Tokyo
이 예제에서:
- 딕셔너리 컴프리헨션을 사용하여 섭씨 온도를 화씨로 변환했습니다.
- 도우미 함수를 사용하여 온도를 "Cool", "Moderate", 또는 "Warm"으로 분류했습니다.
reduce()함수를 람다와 함께 사용하여 온도 범주별로 도시를 그룹화했습니다.
이러한 기술은 람다 함수가 복잡한 딕셔너리 작업을 더 간결하고 읽기 쉽게 만들 수 있음을 보여줍니다. 보시다시피, 람다 함수를 Python 의 내장 함수 및 딕셔너리 연산과 결합하면 강력한 데이터 조작 도구를 제공합니다.
요약
이 튜토리얼에서는 람다 함수를 사용하여 Python 에서 딕셔너리 값을 업데이트하는 방법을 배웠습니다. 다음 내용을 다루었습니다.
- 람다 함수와 구문 이해
- Python 에서 딕셔너리 작업
- 람다 함수를 사용하여 딕셔너리 값을 조건부 및 무조건적으로 업데이트
- 딕셔너리 정렬 및 값 변환과 같은 고급 응용 프로그램
- 람다 함수를 Python 의 내장 함수 (예:
map(),filter(),reduce()) 와 결합
이러한 기술은 Python 에서 딕셔너리로 작업할 때 더 간결하고 읽기 쉬운 코드를 작성하는 데 도움이 됩니다. Python 여정을 계속 진행하면서 람다 함수가 프로그래밍 도구 상자에서, 특히 데이터 조작 작업에 점점 더 유용한 도구가 될 것입니다.
람다 함수는 강력하지만 간단한 작업에 가장 적합하다는 점을 기억하십시오. 더 복잡한 로직의 경우 코드 가독성과 유지 관리성을 유지하기 위해 일반적인 명명된 함수를 사용하는 것을 고려하십시오.



