공부/AI

파이썬 컨테이너 Container 딕셔너리 dict

글로벌디노 2024. 11. 25. 22:17

딕셔너리 dict { : }

 

딕셔너리 생성 (Create)

 

1. 중괄호 {} 사용

# 빈 딕셔너리 생성
empty_dict = {}
print(empty_dict)

# 키-값 쌍을 직접 지정하여 딕셔너리 생성
person = {
    "name": "John Doe",
    "age": 30,
    "city": "New York"
}
print(person)

 

 

2. dict() 생성자 사용

 

키워드 인자를 사용하여 키-값 쌍을 지정

# 키워드 인자를 사용하여 딕셔너리 생성
person = dict(name="John Doe", age=30, city="New York")
print(person)

 

리스트나 튜플의 리스트를 사용하여 딕셔너리를 생성

# 리스트의 리스트를 사용하여 딕셔너리 생성
data = [["name", "John Doe"], ["age", 30], ["city", "New York"]]
person = dict(data)
print(person)

# 튜플의 리스트를 사용하여 딕셔너리 생성
data = (("name", "John Doe"), ("age", 30), ("city", "New York"))
person = dict(data)
print(person)

# 리스트와 튜플 혼합
data = [[1, "Choi"], (2, 20), [3, 3.14]]
data_dic = dict(data)
print(data_dic)

 

두 개의 리스트를 zip 함수를 사용하여 딕셔너리를 생성

# 두개의 리스트를 zip 을 사용해서 딕셔너리 생성
keys = ["name", "age", "city"]
values = ["John Doe", 30, "New York"]
person = dict(zip(keys, values))
print(person)

 

 

3. 딕셔너리 표현식 (Dictionary Comprehension)

 

{키_표현식: 값_표현식 for 변수 in 반복 가능한 객체 if 조건} 형식을 사용

# 1부터 5까지의 숫자를 키로, 제곱을 값으로 하는 딕셔너리 생성
squares = {num: num**2 for num in range(1, 6)}
print(squares)

# 문자열 리스트에서 각 문자를 키로, 문자의 개수를 값으로 하는 딕셔너리 생성
word = "happyhappy"
char_count = {c: word.count(c) for c in word}
print(char_count)

 

 

4. fromkeys() 메서드

 

fromkeys() 메서드는 주어진 키 리스트와 값으로 딕셔너리를 생성합니다. 모든 키는 동일한 값을 갖습니다.

# 키 리스트를 사용하여 딕셔너리 생성 (모든 값은 None)
keys = ["name", "age", "city"]
person = dict.fromkeys(keys)
print(person)

# 키 리스트와 값을 지정하여 딕셔너리 생성
keys = ["name", "age", "city"]
person = dict.fromkeys(keys, "hahaha")
print(person)

 

 

딕셔너리의 읽기 (Read)

1. 키를 사용해 값 접근 ['키']

my_dict = {"name": "John Doe", "age": 30, "city": "New York"}

name = my_dict["name"]  # "name" 키에 해당하는 값을 읽음
print(name)  # "John Doe" 출력

age = my_dict["age"]  # "age" 키에 해당하는 값을 읽음
print(age)  # 30 출력

 

만약 존재하지 않는 키를 사용하면 KeyError 발생

 

 

2. get() 메서드 사용

 

get() 메서드는 키에 해당하는 값을 반환합니다.

존재하지 않는 키를 사용해도 KeyError가 발생하지 않고, 대신 None을 반환합니다.

get() 메서드의 두 번째 인자로 디폴트 값을 지정할 수 있습니다. 존재하지 않는 키를 사용하면 디폴트 값이 반환됩니다.

my_dict = {"name": "John Doe", "age": 30, "city": "New York"}

name = my_dict.get("name")  # "name" 키에 해당하는 값을 읽음
print(name)  # "John Doe" 출력

country = my_dict.get("country")  # "country" 키에 해당하는 값을 읽음 (None 반환)
print(country)  # None 출력

country = my_dict.get("country", "Unknown")  # "country" 키에 해당하는 값을 읽음 (디폴트 값 "Unknown" 반환)
print(country)  # "Unknown" 출력

 

 

3. for 루프 사용

 

for 루프를 사용하여 딕셔너리의 모든 키-값 쌍을 순회하며 읽을 수 있습니다.

items() 메서드는 딕셔너리의 키-값 쌍을 튜플 형태로 반환합니다.

my_dict = {"name": "YoungJin", "age": 33, "city": "Seoul"}

for key, value in my_dict.items():
  print(f"{key}: {value}")  # 키와 값을 출력

 

 

4. keys(), values(), items() 메서드

 

keys() 메서드는 딕셔너리의 모든 키를 반환합니다.

values() 메서드는 딕셔너리의 모든 값을 반환합니다.

items() 메서드는 딕셔너리의 모든 키-값 쌍을 튜플 형태로 반환합니다.

my_dict = {"name": "YoungJin", "age": 33, "city": "Seoul"}

keys = my_dict.keys()
print(keys)

values = my_dict.values()
print(values)

items = my_dict.items()
print(items)

 

 

in 연사자를 사용하여 키 존재여부 확인

my_dict = {"name": "YoungJin", "age": 33, "city": "Seoul"}

if "name" in my_dict:
  print("이름 키가 존재합니다.")  # 출력됨

if "country" in my_dict:
  print("국가 키가 존재합니다.")  # 출력되지 않음

이름 키가 존재합니다.

 

 

딕셔너리 수정 (Update)

my_dict = {"name": "John Doe", "age": 30, "city": "New York"}

# 1. 키를 사용하여 값 수정
my_dict["name"] = "YoungJin"
my_dict["age"] = 33
my_dict["city"] = "Suwon"

print(my_dict)

# 2. update() 메서드 사용
my_dict.update({"name": "유나", "age": 26, "city": "안양", "height": 165})

print(my_dict)

 

 

딕셔너리 키와 값으로 리스트 생성

my_dict = {"name": "영진", "age": 36, "city": "수원"}

keys = list(my_dict.keys())
print(keys)

values = list(my_dict.values())
print(values)

 

 

딕셔너리 삭제 (Delete)

 

1. del 키워드 사용

특정 키에 해당하는 아이템을 삭제

my_dict = {"name": "영진", "age": 22, "city": "서울"}

del my_dict["age"]  # "age" 키에 해당하는 아이템 삭제
print(my_dict)   # {'name': '영진', 'city': '서울'} 출력

del my_dict["age"]  # KeyError 발생 (존재하지 않는 키)

 

2. pop() 메서드 사용

pop() 메서드는 특정 키에 해당하는 아이템을 삭제하고, 삭제된 값을 반환한다

my_dict = {"name": "영진", "age": 22, "city": "서울"}

age = my_dict.pop("age")
print(age)      # 22 출력
print(my_dict)  # {'name': '영진', 'city': '서울'}

 

 

pop() 메서드의 두 번째 인자로 디폴트 값을 지정할 수 있다.

존재하지 않는 키를 사용하면 디폴트 값 반환

my_dict = {"name": "영진", "age": 22, "city": "서울"}
country = my_dict.pop("country", "Unknown")
print(country)   # Unknown 출력

 

존재하지 않는 키를 사용하고 디폴트 값을 지정하지 않으면 KeyError 발생

my_dict = {"name": "영진", "age": 22, "city": "서울"}
country = my_dict.pop("country")
print(country)   # KeyError: 'country'

 

 

3. popitem() 메서드 사용

 

popitem() 메서드는 딕셔너리에서 임의의 아이템을 삭제하고, 삭제된 아이템을 (키, 값) 튜플 형태로 반환합니다.

Python 3.7 이상에서는 LIFO (Last-In, First-Out) 순서로 아이템을 삭제합니다. 즉, 가장 최근에 추가된 아이템이 먼저 삭제됩니다.

my_dict = {"name": "고길동", "age": 46, "city": "인천"}
print(my_dict.popitem())   # ('city', '인천') 출력

 

 

4.. clear() 메서드 사용

딕셔너리의 모든 아이템 삭제

my_dict = {"name": "임꺽정", "age": 22, "city": "부산"}
my_dict.clear()
print(my_dict)   # {} 출력

 

반응형