[Python]딕셔너리 문제풀기 - 혼.공.파

이유진·2022년 2월 2일
0

Python

목록 보기
2/9

python 기초 공부를 다시 시작하면서,
혼.공.파에 있는 마무리 문제를 풀면서 개념 정리 겸, 문제 풀이를 적어보려고 한다.

<문제.1>

# numbers 내부에 들어가는 숫자가 몇번 등장하는가?

numbers = [1,2,6,8,4,3,2,1,9,5,4,9,7,2,1,3,5,4,8,9,7,2,3]
counter = {}

문제를 보고 처음에 접근 방식을 아래와 같이 생각을 했다.👇

뽑은 numbers를 키로 / numbers안에 number가 있다면 count()함수로 센 갯수를 벨류로,
그리고 이미, number라는 키가 있다면 pass

과정1)

velue값으로 설정할 값을 먼저 출력해서 확인해보기로 했다.

for number in numbers:
	print(numbers.count(number)) # velue값

<출력결과>

3
4
1
2
3
3
4
3
3
2
3
3
2
4
3
3
2
3
2
3
2
4
3

모든 요소(instant)의 갯수가 모두 출력되었다.

과정2)

key와 velue를 설정하고, print()로 출력해보기로 했다.

for number in numbers:
	counter[number] = numbers.count(number)
	print()
print(counter)

<출력결과>

{1: 3}
{1: 3, 2: 4}
{1: 3, 2: 4, 6: 1}
{1: 3, 2: 4, 6: 1, 8: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}
{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}

for문 내에 print(counter) 를 실행했기 때문에 함수 한줄한줄 실행될 때마다, print() 함수가 실행된 것.

과정3)

이번에는 for()함수 내의 print()제외하고 실행해보자.

<출력결과>

{1: 3, 2: 4, 6: 1, 8: 2, 4: 3, 3: 3, 9: 3, 5: 2, 7: 2}

원하는 출력값이 나왔다.

즉, 중복된 키값이 있을 경우, 그 후에 나온 키와 velue 값에 뒤집어 씌어진다.

딕셔너리 중복 값 참조1
딕셔너리 중복 값 참조2 - stack over folw
딕셔너리 중복 값 참조3 - stack over folw


<문제.2>

# 각 리스트를 조합해 하나의 딕셔너리 만들기

key_list = ["name", "hp", "mp", "level"]
value_list = ["기사", 200, 30, 5]
character = {}

문제를 보고 처음에 접근 방식을 아래와 같이 생각을 했다.👇

key_list 인덱스 한개씩 추출
value_list 인덱스 한개씩 추출
charcater[key_list] = value_list

과정1)

인덱스로 한개씩 추출 해보기로 했으니, for()을 통해서 출력해보기로 했다.

for i in key_list:
    for j in value_list:
            character[i] = j

print(character)

<출력결과>

{'name': 5, 'hp': 5, 'mp': 5, 'level': 5}

당연히, value값들이 value_lis의 가장 마지막 요소인 5로 덮어지게 되었다.

i의 value에 이미 j가 저장되면, 다음 인덱스로 넘어가게? 작성해보려고 하였으나, error 발생하였다.

과정2)

[ Hint ] 두 리스트의 길이가 동일하니, 길이를 사용한 반복문을 작성해보기.
(필요한 인덱스에 직접 접근 가능)

for i in range(len(key_list)):
    character[key_list[i]] = value_list[i]
        
print(character)
profile
차근차근 배워나가는 주니어 개발자

0개의 댓글