Programming Languages/Python

[Python] 리스트와 딕셔너리의 차이

쉬지마 이굥진 2024. 4. 29. 02:55

오늘은 알고리즘 문제를 풀어오며 머리속에 둥둥 떠다니던 리스트와 딕셔너리의 개념을 확실히 정립하고 넘어가고자 포스팅을 작성해보려고 한다.

리스트와 딕셔너리 각각의 개념을 예시와 함께 정리하고, 이 둘의 차이와 활용 방법, 더 나아가 리스트와 딕셔너리를 어떻게 조합해서 쓸 수 있을까 까지 정리해보겠다 😋

 

✏️ 리스트란?

여러 가지 값을 순서대로 저장할 수 있는 데이터 구조이다. 

a = [1, 5, 2]
b = [3, "a", 6, 1]
c = []
d = list()

같은 자료형도 들어갈 수 있고, 다른 자료형도 들어갈 수 있다.

 

또한 리스트의 길이는 len() 함수를 사용해서 잴 수 있다.

a = [1, 5, 2]
print(len(a))   # 출력값: 3

b = [1, 3, [2, 0], 1]
print(len(b))   # 출력값: 4

 

맨 처음 말한 것 처럼, 순서가 있기 때문에 문자열에서처럼 ('') 인덱싱슬라이싱을 사용할 수 있다! 

a = [1, 3, 2, 4]
print(a[3])   # 출력값: 4
print(a[1:3]) # 출력값: [3, 2]
print(a[-1])  # 출력값: 4 (맨 마지막 것)

 

리스트의 요소가 리스트라면? 중첩해서 사용할 수도 있다.

a = [1, 2, [2, 3], 0]
print(a[2])      # [2, 3]
print(a[2][0])   # 2 (a[2] 요소인 [2, 3] 리스트에서 0번째 요소를 출력하라는 뜻)

 

 

리스트의 활용

1. 기존의 리스트에 요소 덧붙이기

a = [1, 2, 3]
a.append(5)  # 5 덧붙이셈
print(a)     # [1, 2, 3, 5]

a.append([1, 2])
print(a)     # [1, 2, 3, 5, [1, 2]]


# 더하기 연산과 비교!
a += [2, 7]
print(a)     # [1, 2, 3, 5, [1, 2], 2, 7]

리스트는 변경 가능한 (mutable) 데이터 구조다. 그러므로 요소를 추가하거나 삭제하거나 수정할 수 있다. 

위의 예제는 append() 라는 메서드를 사용해서 리스트를 변경해 본 예제다. (pop(), remove() 등 사용 가능)

 

변경 가능, 변경 불가능한 구조의 차이는 일전에 작성해 둔 포스팅을 첨부해두겠다 :-) 

👉변수의 mutable과 immutable 구조의 차이

 

 

위의 예제에서 주의할 점은 # 더하기 연산과 비교 부분이다.

# 더하기 연산과 비교!
a += [2, 7] 
print(a)     # [1, 2, 3, 5, [1, 2], 2, 7]

더하기 연산으로 리스트 자체는 추가할 수 있지만, 리스트가 그대로 추가되는 것이 아니라 리스트의 각 요소가 개별적으로 추가된다. 즉, 두 리스트가 연결되는 것이 아니라! 한 리스트의 요소들이 다른 리스트에 추가된다고 생각하면 된다.

# 위의 연산과 비교!
a += [[2, 7]]
print(a)     # [1, 2, 3, 5, [1, 2], [2, 7]]

 

만약 위 코드에서 a.append([2, 7]) 과 같이 리스트로 추가해주고 싶다면 위처럼 적으면 됨 ㅎ 

 

만약 요소를 추가하고 싶다고 더하기 연산으로 리스트가 아닌 정수를 추가해주게 되면 👉 에러난다.

파이썬에서 리스트에 다른 리스트를 더하는 건 (+) 가능하지만, 정수를 더하는 건 파이썬에서 이 연산 자체를 이해하지 못한다. 

 

2. 정렬하기

a = [2, 5, 3]

a.sort()
print(a)   # [2, 3, 5]

a.sort(reverse=True)
print(a)   # [5, 3, 2]

파이썬에서 sort() 메서드를 통해 리스트를 정렬할 수 있다. 디폴트값은 오름차순이다.

내림차순으로 정렬하고 싶다면? 위의 예제처럼 reverse=True 옵션을 사용하면 된다 ㅎ

 

3. 요소가 리스트 안에 있는지 알아보기

a = [2, 1, 4, "2", 6]

print(1 in a)      # True
print("1" in a)    # False
print(0 not in a)  # True

 

리스트의 활용 방법은 이것 말고도 무궁무진하다. 보면 볼수록 재밌는 구조다.


✏️ 딕셔너리 (dictionary) 란?

딕셔너리는 key와 value의으로 이루어진 자료의 모임이다.

전화번호부에서 이름을 입력하면, 전화번호가 나오는 것과 동일하다. 

person = {"name":"Bob", "age": 21}
print(person["name"])	# 출력값: Bob

여기서 key는 name, age이고 value는 Bob과 21이다. (Bob은 문자이므로 "" 처리)

 

딕셔너리의 요소에는 순서가 없기 때문에, 리스트와는 달리 인덱싱을 사용할 수 없다.

person = {"name":"Bob", "age": 21}
print(person[0])   # 0이라는 key가 없으므로 KeyError 발생!

 

딕셔너리 어케 만드나요

딕셔너리를 만드는 데는 여러가지 방법이 있다. 기본적으로 중괄호 '{}'를 사용한다.

my_dict = {key1: value1, key2: value2, key3: value3, ...}
a = {"one":1, "two":2}

# 빈 딕셔너리 만들기
a = {}
a = dict()

 

 

딕셔너리의 활용

1. 딕셔너리의 값 업데이트하기

person = {"name": "Bob", "age": 21}

person["name"] = "Robert"
print(person)  # {'name': 'Robert', 'age': 21} (name 값이 Robert로 바뀜)

 

 

2. 새로운 쌍의 자료 넣기

person = {"name": "Bob", "age": 21}

person["height"] = 174.8
print(person)  # {'name': 'Bob', 'age': 21, 'height': 174.8} (height 값이 추가됨)

 

 

3. 다른 딕셔너리를 넣을 수도 있음

person = {"name": "Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}

print(person["scores"])             # {'math': 81, 'science': 92, 'Korean': 84}
print(person["scores"]["science"])  # 92

 


✏️ 리스트와 딕셔너리의 조합

딕셔너리는 리스트와 함께 쓰면서 자료를 정리하는 데 쓰일 수 있다.

people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]

print( people[0]['name'] ) 	# 출력값: 'bob'
print( people[1]['name'] )	# 출력값: 'carry'

person = {'name': 'john', 'age': 7}
people.append(person)

print(people)
# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
print(people[2]['name'])    	# 출력값: 'john'

 

 

간단 연습 !!!!

people = [
    {'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
    {'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
    {'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
    {'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]

 

위의 people 리스트에서 smith의 science 점수를 출력해보자! 

아래 '정답' 텍스트를 클릭하면 정답이 보인다.

정답 print(people[2]['score']['science'])

 


✏️ 정리

이렇게 리스트와 딕셔너리에 대해 정리해봤다.

짧게 요약하면,

[리스트] 는 순서가 있는 데이터 구조로, 여러 다양한 자료형의 값을 저장할 수 있고, 요소의 추가, 삭제, 수정이 가능하다.

{딕셔너리} 는 key와 value의 쌍으로 이루어진 자료구조로, 순서가 없으며, 특정 key를 통해 value에 접근한다!