Python dictionary-based data processing

✅ 1. Print average score of a student

특정 학생의 평균 점수 출력

EN: Print the average score of the given student to 2 decimal places.
KR: 주어진 학생의 평균 점수를 소수점 둘째 자리까지 출력하세요.

Example Input / 입력 예시


3 Alice 90 80 85 Bob 70 60 65 Carol 100 95 90 Bob

Example Output / 출력 예시


65.00

Solution / 정답


if __name__ == '__main__': n = int(input()) student_scores = {} for _ in range(n): name, *scores = input().split() student_scores[name] = list(map(int, scores)) query = input() avg = sum(student_scores[query]) / len(student_scores[query]) print(f"{avg:.2f}")

Review / 복습 포인트

  • Use dictionary to store scores / 딕셔너리로 점수 저장

  • Use *scores to unpack / 언패킹 사용

  • Use sum()/len() to compute average / 평균 계산

  • Use f"{value:.2f}" for formatting / 소수점 출력 포맷


✅ 2. Print total score of a student

특정 학생의 총합 점수 출력

EN: Output the total score of the student specified.
KR: 특정 학생의 총합 점수를 출력하세요.

Output Code


total = sum(student_scores[query]) print(total)

Review

  • Use sum() to add up values / sum()으로 총합 계산


✅ 3. Filter students with average ≥ 60

평균이 60점 이상인 학생 필터링

EN: Print only students whose average score is 60 or more.
KR: 평균 점수가 60 이상인 학생의 이름만 출력하세요.


for name in student_scores: avg = sum(student_scores[name]) / len(student_scores[name]) if avg >= 60: print(name)

Review

  • Filtering condition using average / 조건 필터링


✅ 4. Sort students by average score

평균 점수 기준으로 정렬

EN: Sort students in ascending order by average score.
KR: 학생들을 평균 점수 기준으로 오름차순 정렬하세요.


sorted_names = sorted(student_scores, key=lambda name: sum(student_scores[name]) / len(student_scores[name]))

Review

  • Use sorted() with lambda for custom key / 정렬 기준 지정


✅ 5. Print top N students by average

평균 기준 상위 N명 출력


top_names = sorted(student_scores, key=lambda name: sum(student_scores[name]) / len(student_scores[name]), reverse=True)[:3]

Review

  • [:N] 슬라이싱 사용

  • reverse=True로 내림차순


✅ 6. Filter names starting with 'a' and sort

'a'로 시작하는 학생만 필터링 후 정렬


filtered = sorted([name for name in student_scores if name.lower().startswith('a')])

Review

  • startswith(), lower() 활용한 문자열 필터링


✅ 7. Find students with second highest average

두 번째로 높은 평균 점수를 가진 학생 찾기


averages = sorted(set(sum(scores)/len(scores) for scores in student_scores.values())) second = averages[-2] result = sorted(name for name in student_scores if sum(student_scores[name])/len(student_scores[name]) == second) for name in result: print(name)

Review

  • set()으로 중복 제거

  • 평균 계산 중복 주의


✅ 8. Sort by average, break tie alphabetically

평균 점수로 정렬하되 동점자는 알파벳순


sorted_names = sorted(student_scores, key=lambda name: (-sum(student_scores[name]) / len(student_scores[name]), name))

Review

  • -avg로 내림차순, name으로 동점자 처리


✅ 9. Filter students with total ≥ 200 and sort

총합 점수 200 이상 학생 필터 후 내림차순 정렬


result = [name for name in student_scores if sum(student_scores[name]) >= 200] result.sort(key=lambda name: sum(student_scores[name]), reverse=True)

Review

  • 조건 필터링 + 정렬 혼합 사용


✅ 10. Sort 'a' names by average descending

'a'로 시작하는 학생들을 평균 기준으로 내림차순 정렬


result = sorted( [name for name in student_scores if name.lower().startswith('a')], key=lambda name: sum(student_scores[name]) / len(student_scores[name]), reverse=True )

Review

  • 조건 필터 후 평균 기준 내림차순





지금까지 풀었던 10문제를 바탕으로, 핵심 개념과 패턴을 복습 정리 모드로 정리해드릴게요.
당신이 공부한 건 단순히 “문제풀이”가 아니라,
Python 딕셔너리 기반 데이터 처리의 핵심 스킬이었습니다. 💪


🧩 1. 📦 데이터 저장: 딕셔너리 + 리스트

student_scores = {} for _ in range(n): name, *marks = input().split() student_scores[name] = list(map(int, marks))
  • name, *marks → unpacking

  • map(int, marks) → 문자열을 숫자로

  • dict[name] = [...] → 이름을 key로 점수 리스트 저장


🧠 2. 📊 평균 / 총합 계산

평균:

avg = sum(student_scores[name]) / len(student_scores[name])

총합:

total = sum(student_scores[name])
  • sum()len() 조합은 필수 스킬


🧹 3. ✅ 조건 필터링 (List comprehension)


# 평균 70 이상만 passed = [name for name in student_scores if sum(student_scores[name]) / len(student_scores[name]) >= 70]

# 이름이 a로 시작하는 학생 a_students = [name for name in student_scores if name.lower().startswith('a')]
  • 조건 + 반복을 한 줄로 처리 → 실전에서도 매우 유용


🔢 4. 🧮 정렬 (sorted + key=)

평균 기준 정렬:

sorted(student_scores, key=lambda name: sum(student_scores[name]) / len(student_scores[name]), reverse=True)

알파벳순 정렬:

sorted(names)

평균 → 동점자 알파벳순:

sorted(student_scores, key=lambda name: (sum(student_scores[name]) / len(student_scores[name]), name), reverse=True)

🎯 5. 🌟 특별한 패턴들

중복 제거 + 정렬:

averages = sorted(set([sum(v)/len(v) for v in student_scores.values()]), reverse=True)

슬라이싱 (Top N명):

sorted_students[:3]

❗ 6. 실수 주의 포인트

실수왜 잘못일까
key=sum(...)sum(...)은 숫자, 함수가 아님
student_scores[name] == number리스트와 숫자 비교 불가능
lambda name: student_scores[name]리스트 자체로 정렬 기준 삼으면 불안정

🧭 7. 정리: 문제유형별 분류

유형예시 문제
단일 조회문제 1, 2
조건 필터링문제 3, 6, 9
정렬문제 4, 5, 8, 10
두 번째 값 찾기문제 7
복합 조건 + 정렬문제 8, 10

📌 추천 복습 방법:

  1. 지금까지 푼 문제 다시 코드 없이 말로 설명해보기

  2. 내가 직접 입력을 만들어보고 출력 예측해보기

  3. lambda, sorted, dict 연습 따로 쪼개서 연습



🧩 퀴즈 1번

Q. Which code correctly calculates the average score of a student from a dictionary called student_scores? A
student_scores = {'Bob': [70, 60, 65]}

A. sum(student_scores['Bob']) / len(student_scores['Bob'])

B. len(student_scores['Bob']) / sum(student_scores['Bob'])

C. student_scores['Bob'] / 3

D. average(student_scores['Bob'])





🧩 퀴즈 2번 (빈칸 채우기)

Q. Fill in the blank to sort students by average score in ascending order.  C

sorted_names = sorted(student_scores, key=_________)

A. student_scores[name]
B. lambda name: sum(student_scores[name])
C. lambda name: sum(student_scores[name]) / len(student_scores[name])
D. student_scores.items()










Comments