[python] .get() 을 사용하는 이유

 

# 상품 리스트를 카테고리별로 분류하여 딕셔너리를 만드세요.

products = [
    {"category": "전자제품", "name": "키보드"},
    {"category": "의류", "name": "티셔츠"},
    {"category": "전자제품", "name": "마우스"},
    {"category": "전자제품", "name": "노트북"},
    {"category": "식품", "name": "사과"},
    {"category": "식품", "name": "배"},
    {"category": "의류", "name": "청바지"}
]

grouped_data = {}


print(f"그룹화 결과: {grouped_data}")

 

각 카테고리 별로 분류하기 위해서는 이런식의 형태가 될 것 이다.

grouped_data = { 전자제품 : [키보드, 마우스, 노트북], 의류 : [티셔츠, 청바지] ... }

 

그러기 위해서는 각 카테고리를 grouped_data 딕셔너리 key값에 정의하고

해당 카테고리에 맞는 제품들의 이름을 리스트 형식으로 추가해야 겠다.

 

products = [
    {"category": "전자제품", "name": "키보드"},
    {"category": "의류", "name": "티셔츠"},
    {"category": "전자제품", "name": "마우스"},
    {"category": "전자제품", "name": "노트북"},
    {"category": "식품", "name": "사과"},
    {"category": "식품", "name": "배"},
    {"category": "의류", "name": "청바지"}
]

grouped_data = {}

for item in products:
    category = item["category"]
    name = item["name"]
    

print(f"그룹화 결과: {grouped_data}")

 

먼저 products를 for문으로 순회하며 각 상품 객체를 하나씩 가져온다.
이후 데이터 그룹핑에 필요한 값인 category와 name을 각각 변수로 할당한다.

 

products = [
    {"category": "전자제품", "name": "키보드"},
    {"category": "의류", "name": "티셔츠"},
    {"category": "전자제품", "name": "마우스"},
    {"category": "전자제품", "name": "노트북"},
    {"category": "식품", "name": "사과"},
    {"category": "식품", "name": "배"},
    {"category": "의류", "name": "청바지"}
]

grouped_data = {}

for item in products:
    category = item["category"]
    name = item["name"]

    grouped_data[category] = []
    grouped_data[category].append(name)
    

print(f"그룹화 결과: {grouped_data}")

 

[문제발생]

grouped_data에 카테고리를 key로 하고, 상품 이름을 리스트 형태로 저장하려 했다.
그러나 grouped_data는 초기 상태가 빈 딕셔너리이기 때문에,
존재하지 않는 key에 바로 append()를 호출하면 오류가 발생했다.

 

처음에는 for문 안에서 카테고리를 key로 하고
빈 리스트를 직접 만들어줬는데,
반복문이 돌 때마다 리스트가 초기화되는 문제가 있었다.

 

이를 해결하기 위해
해당 카테고리가 처음 등장한 경우에만 리스트를 생성하도록 처리했고,
그 과정에서 dict.get()을 사용했다.

 

products = [
    {"category": "전자제품", "name": "키보드"},
    {"category": "의류", "name": "티셔츠"},
    {"category": "전자제품", "name": "마우스"},
    {"category": "전자제품", "name": "노트북"},
    {"category": "식품", "name": "사과"},
    {"category": "식품", "name": "배"},
    {"category": "의류", "name": "청바지"}
]

grouped_data = {}

# grouped_data는 처음에 빈 딕셔너리 {}
# → 아직 어떤 category도 key로 존재하지 않는 상태

for item in products:
    category = item["category"]
    name = item["name"]

    # 현재 category가 grouped_data에 없다면
    # → 처음 등장한 카테고리이므로 빈 리스트를 먼저 생성
    if grouped_data.get(category) is None:
        grouped_data[category] = []

    # 해당 카테고리 리스트에 name 추가
    grouped_data[category].append(name)
    
    
print(f"그룹화 결과: {grouped_data}")

 

 

get() - 안전하게 값 조회

 

1️⃣ 일반 접근 방식의 문제점

data = {"name": "철수", "age": 20}
print(data["email"])

# KeyError: 'email'
  • 키가 없으면 바로 에러 발생
  • 프로그램이 멈출 수 있음

2️⃣ get()을 쓰는 이유 (에러 방지)

print(data.get("email"))

# None
 
  • 키가 없으면 에러 ❌
  • 대신 None 반환

👉 안전함


3️⃣ 기본값을 줄 수 있어서 좋다

print(data.get("email", "없음"))

# 없음
  • 키가 없을 때 원하는 값으로 대체 가능
  • 조건문을 줄일 수 있음