Phase 1 · 파이썬 기초

자료구조 — 데이터를 체계적으로 관리하기

거래처의 이름, 사업자번호, 담당자, 금액 등 여러 정보를 엑셀의 표처럼 구조화하는 방법을 배웁니다.
리스트(List)와 딕셔너리(Dictionary)를 결합하여 실무 데이터 분석의 뼈대를 만듭니다.

예상 학습 시간 : 150분
난이도 : ★★★★☆
사전 단계 : Step 04 반복문
다음 단계 : 함수
01

학습 목표

수업이 끝나면 다음을 할 수 있어야 합니다.

1
리스트의 개념을 이해한다.
2
리스트에 데이터를 추가·삭제할 수 있다.
3
리스트의 특정 데이터(인덱스)를 가져올 수 있다.
4
딕셔너리의 개념을 이해한다.
5
keyvalue를 이해한다.
6
딕셔너리의 데이터를 추가·수정·삭제할 수 있다.
7
리스트와 딕셔너리를 결합할 수 있다. (핵심)
8
실제 업무 데이터를 구조화할 수 있다.
02

자료구조란? (리스트의 필요성)

자료구조(Data Structure)는 쉽게 말해 "데이터를 저장하고 관리하는 방법"입니다.

학생 5명의 이름을 저장한다고 가정해봅시다.

😰 일반 변수 (불편함)
name1 = "김철수"
name2 = "이영희"
name3 = "박민수"
name4 = "최지영"
name5 = "홍길동"

학생이 1,000명이면 변수를 1,000개 만들어야 합니다.

✅ 리스트 활용 (편리함)
students = [
    "김철수",
    "이영희",
    "박민수",
    "최지영",
    "홍길동"
]

하나의 변수에 무한히 담고, for문으로 쉽게 돌릴 수 있습니다.

03

리스트 기초와 인덱스(Index)

리스트는 대괄호 []를 사용하여 데이터를 묶습니다.
그리고 데이터의 순서 번호(인덱스)를 사용해 값을 꺼냅니다. 인덱스는 0부터 시작합니다.

🐍 리스트 데이터 가져오기
fruits = ["사과", "바나나", "오렌지"]

print(fruits[0])  # 0번 데이터
print(fruits[1])  # 1번 데이터
print(fruits[2])  # 2번 데이터
▶ 실행 결과
사과
바나나
오렌지
리스트 데이터 수정하기

인덱스로 접근해서 변수처럼 값을 다시 저장하면 됩니다.

fruits[1] = "포도"
# 이제 fruits는 ["사과", "포도", "오렌지"] 가 됩니다.
04

데이터 추가와 삭제 (append, remove, pop)

데이터 추가 : append()

append()는 리스트의 맨 뒤에 데이터를 계속 추가합니다.

🐍 append() 활용
customers = []   # 빈 리스트 준비

customers.append("ABC상사")
customers.append("DEF기업")
customers.append("GHI상사")

print(customers)
▶ 실행 결과
['ABC상사', 'DEF기업', 'GHI상사']

데이터 삭제 : remove() 와 pop()

remove() : '값'으로 삭제
customers = ["A상사", "B기업", "C상사"]

customers.remove("B기업")
print(customers)
# 결과: ['A상사', 'C상사']
pop() : '위치(인덱스)'로 삭제
customers = ["A상사", "B기업", "C상사"]

customers.pop(1)
print(customers)
# 결과: ['A상사', 'C상사']
05

리스트 정렬 (sort)

숫자나 문자열이 섞인 리스트를 쉽게 정렬할 수 있습니다.

🐍 오름차순과 내림차순 정렬
amounts = [5000000, 1000000, 3000000, 8000000]

# 오름차순 정렬 (작은 수부터)
amounts.sort()
print(amounts)  # [1000000, 3000000, 5000000, 8000000]

# 내림차순 정렬 (큰 수부터)
amounts.sort(reverse=True)
print(amounts)  # [8000000, 5000000, 3000000, 1000000]
리스트의 한계와 딕셔너리의 등장

리스트 안에 여러 정보를 담으면 어떻게 될까요?
customer = ["ABC상사", "123-45-67890", "홍길동", 50000000]
코드를 볼 때 customer[2]가 담당자 이름인지 단번에 알아채기 힘듭니다. 이를 해결하기 위해 딕셔너리를 배웁니다.

06

딕셔너리(Dictionary) 기초

딕셔너리는 데이터를 "이름(Key) → 값(Value)" 형태로 직관적으로 저장합니다.

🐍 딕셔너리 만들기
customer = {
    "name": "ABC상사",
    "business_no": "123-45-67890",
    "manager": "홍길동",
    "amount": 50000000
}

값을 꺼낼 때는 인덱스(0, 1) 대신 Key를 사용합니다.

print(customer["name"])     # 결과: ABC상사
print(customer["amount"])   # 결과: 50000000
07

딕셔너리 조작 (추가, 수정, 삭제)

값 수정하기
customer["amount"] = 70000000
# 해당 Key에 덮어쓰기
새로운 값 추가하기
customer["type"] = "주요거래처"
# 없는 Key에 값을 넣으면 새로 추가됨
데이터 삭제하기 (del)
del customer["manager"]

딕셔너리와 for문 (Key와 Value 함께 뽑기)

🐍 items() 메서드 활용
for key, value in customer.items():
    print(f"{key} : {value}")
08

결합: 리스트 + 딕셔너리 (실무 핵심 구조)

실제 엑셀의 표처럼, "여러 개의 거래처"(리스트)가 있고 "각 거래처마다 세부 정보"(딕셔너리)가 있는 형태입니다.

🐍 리스트 안에 딕셔너리 담기
customers = [
    {"name": "ABC상사", "amount": 5000000, "type": "일반"},
    {"name": "DEF기업", "amount": 15000000, "type": "주요"},
    {"name": "GHI상사", "amount": 80000000, "type": "주요"}
]
customers (리스트)
 │
 ├─ 거래처 1 (딕셔너리)
 │    ├─ name : "ABC상사"
 │    └─ amount : 5000000
 │
 ├─ 거래처 2 (딕셔너리)
 │    ├─ name : "DEF기업"
 │    └─ amount : 15000000
 ...
🐍 반복해서 처리하기
for customer in customers:
    print(customer["name"])
    print(customer["amount"])
    print("---")
▶ 실행 결과
ABC상사
5000000
---
DEF기업
15000000
---
...
09

거래처 관리 자동화 (반복 + 조건 결합)

이제 배운 것을 모두 섞습니다. 고액 거래(1천만 원 이상) 거래처만 찾아내기 같은 작업을 한 번에 처리합니다.

🐍 조건과 반복 결합
for customer in customers:

    if customer["amount"] >= 50000000:
        grade = "A등급"
    elif customer["amount"] >= 10000000:
        grade = "B등급"
    else:
        grade = "C등급"

    print(f"{customer['name']}{customer['amount']:,}원 → {grade}")
▶ 실행 결과
ABC상사 → 5,000,000원 → C등급
DEF기업 → 15,000,000원 → B등급
GHI상사 → 80,000,000원 → A등급

이 구조는 수백만 개의 데이터가 있어도 완벽하게 동일하게 작동합니다.

10

사용자 입력과 동적 추가

사용자로부터 정보를 입력받아 실시간으로 리스트(시스템)에 추가할 수 있습니다.

🐍 사용자 입력 받아 딕셔너리로 만들고 리스트에 넣기
customers = []  # 비어있는 데이터베이스 역할

for i in range(3):
    print(f"\n{i+1}번째 거래처")
    name   = input("거래처명: ")
    amount = int(input("거래금액: "))

    # 1. 딕셔너리로 패키징
    new_cust = {
        "name": name,
        "amount": amount
    }

    # 2. 리스트에 저장
    customers.append(new_cust)
12

5단계 최종 프로젝트 — 메뉴형 거래처 관리 시스템

1단계부터 5단계까지 배운 모든 문법(변수, 자료형, 조건문, 반복문, 리스트, 딕셔너리)을 결합하여, 콘솔 기반 미니 앱을 만듭니다.

🚀
통합 프로젝트
거래처 관리 프로그램 (CRUD)
🐍 Python 전체 코드
customers = []

while True:
    print("\n================================")
    print("       거래처 관리 프로그램")
    print("================================")
    print("1. 거래처 등록")
    print("2. 거래처 목록")
    print("3. 거래처 검색")
    print("4. 고액 거래처")
    print("5. 전체 거래금액")
    print("6. 종료")

    menu = input("메뉴 선택: ")

    if menu == "1":
        name = input("거래처명: ")
        business_no = input("사업자번호: ")
        manager = input("담당자: ")
        amount = int(input("거래금액: "))
        c_type = input("유형: ")

        customers.append({
            "name": name, "business_no": business_no,
            "manager": manager, "amount": amount, "type": c_type
        })
        print("등록 완료!")

    elif menu == "2":
        print("\n===== 거래처 목록 =====")
        for c in customers:
            print(f"이름: {c['name']} | 금액: {c['amount']:,}원 | 담당: {c['manager']}")

    elif menu == "3":
        search = input("검색할 거래처: ")
        found = False
        for c in customers:
            if c["name"] == search:
                print(f"찾았습니다: {c}")
                found = True
                break
        if not found:
            print("없습니다.")

    elif menu == "4":
        print("\n===== 고액 거래처 (1천만 이상) =====")
        for c in customers:
            if c["amount"] >= 10000000:
                print(f"{c['name']} : {c['amount']:,}원")

    elif menu == "5":
        total = 0
        for c in customers:
            total += c["amount"]
        print(f"\n전체 합계: {total:,}원")

    elif menu == "6":
        print("종료합니다.")
        break
    else:
        print("잘못된 입력입니다.")
🎓 강사 포인트

초보자 과정에서 학생들이 만나는 첫 번째 제대로 된 미니 프로젝트입니다. 데이터를 어떻게 구조화하고(리스트+딕셔너리), 어떻게 흐름을 제어하는지(while True + if/elif) 완벽히 익힐 수 있습니다.

13

1~5단계 연결 및 발전 과정

우리가 지금까지 배운 파이썬의 핵심을 연결하면 다음과 같습니다.

1단계
print() / 기본 문법
기본 출력
2단계
변수 / 자료형 / input()
입력 및 계산
3단계
if / elif / else
조건 판단과 분기
4단계
for / while / break
대량 데이터 반복 통계
5단계
List / Dictionary
복잡한 데이터의 체계적 구조화
14

과제 & 다음 단계 예고

과제 1 — 학생 성적 관리
students = [ {"name":"김철수", "score":90}, {"name":"박민수", "score":55} ... ]

위와 같은 학생 리스트(딕셔너리 포함)를 만들어 순회하며, 점수에 따라 등급(A~F)을 출력해보세요.

과제 2 — 거래처 데이터 통계 분석

주어진 customers (리스트+딕셔너리 결합) 데이터를 이용해 다음을 출력하세요.
1. 전체 거래처 수  2. 전체 거래금액  3. 평균 거래금액  4. 1천만 원 이상 거래처 수

다음 단계 예고 — Step 06: 함수 (Function)

우리가 방금 만든 거래처 관리 프로그램 코드를 보면, if menu == "1" 안에 수많은 코드가 쌓여 점점 더 길어지고 복잡해집니다.
다음 6단계에서는 기능별로 코드를 분리하는 함수(def)를 배웁니다.
단순한 문법을 넘어 실무 프로그램을 어떻게 깔끔하게 유지보수할 것인가를 배우는 첫걸음이 됩니다.

1단계 — print() · 실행 순서 ✓ 완료
2단계 — 변수 · 자료형 · input() ✓ 완료
3단계 — 조건문 if · elif · else ✓ 완료
4단계 — 반복문 — for · while ✓ 완료
5단계 — 자료구조 — 리스트 · 딕셔너리 현재 단계
6단계 — 함수 — 모듈화와 재사용
7단계 ★ — 파일 처리 — 회계 실무 전환
10단계 ★ — 엑셀 자동화
Step 04 : 반복문 Step 06 : 함수