Python | 딕셔너리(dictionary) (수정)

Stellar·2021년 4월 21일
0

Python

목록 보기
4/36
post-thumbnail
post-custom-banner

❓ 딕셔너리(dictionary)란

  • 특정 주제에 대해 연관된 값을 저장하는 방식

✔ 딕셔너리 만들기

  • {}중괄호 안에 키:값 형식으로 저장하며 각 키와 값은 ,(콤마)로 구분
  • 키와 값은 1:1 대응한다.
  • 위의 특징이 리스트, 튜플과 딕셔너리의 차이점
  • 딕셔너리={키1:값1, 키2:값2}

>>> lux = {'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}
#실행결과
>>> lux
{'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}

✔ 키 이름이 중복될 경우

  • 키가 중복되면 가장 뒤에 위치한 값만 사용

>>> fruits = {'apple':1, 'banana':2, 'pear':1, 'apple':2}
#실행결과
>>> fruits
{'apple': 2, 'banana': 2, 'pair': 1} 
# 키의 순서는 변함 없지만 값은 제일 뒤에 위치한 값이 옴.

✔ 딕셔너리 키의 자료형

  • 키는 문자열, 정수, 실수, 불 타입도 사용가능하며 자료형을 섞어 사용할 수 있다.
  • 값은 리스트, 딕셔너리 등을 포함한 모든 자료형 사용가능
  • 키는 리스트, 딕셔너리를 사용할 수 없다.

>>> x = {100: 'hundred', False: 0, 3.5: [3.5, 3.5]}
#실행결과
>>> x
{100: 'hundred', False: 0, 3.5: [3.5, 3.5]}

✔ 빈 딕셔너리

  • 딕셔너리 = {}
  • 딕셔리 = dict()
  • 보통은 딕셔너리 = {}를 주로 사용

x = {}
y = dict()
print(x)
print(y)
#실행결과
{}
{}

✔ dict로 딕셔너리 만들기

  • 키와 값을 연결하거나, list, tuple, dictionary로 딕셔너리를 만들 때 사용

📌 딕셔너리 = dict(키1=값1 키2=값2)

  • dict에서 키=값 형식으로 키에 ''(작은따옴표)나 ""(큰따옴표)를 사용하지 않아야함. 결과에서 자동으로 문자열로 변경됨.

>>> lux1 = dict(health=490, mana=334, melee=550, armor=18.72)
#실행결과
>>> lux1
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

📌 딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))

  • dict에 zip함수를 이용하는 방법.
  • list, tuple 사용 가능

lux2 = dict(zip(['health', 'mana', 'melee', 'armor'], [490, 334, 550, 18.72]))
#실행결과
>>> lux2
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

📌 딕셔너리 = dict([(키1, 값1), (키2, 값2)])

  • 리스트 안에 튜플을 나열

>>> lux3 = dict([('health', 490), ('mana', 334), ('melee', 550), ('armor', 18.72)])
# 리스트 안에 튜플 [()]
#실행결과
>>> lux3
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

📌 딕셔너리 = dict({키1:값1, 키2:값2})

  • {}중괄호 사용

>>> lux4 = dict({'health': 490, 'mana':334, 'melee':550, 'armor': 18.72})
#실행결과
>>> lux4
{'health': 490, 'mana': 334, 'melee': 550, 'armor': 18.72}

✔ 키에 접근하기

  • 딕셔너리[키]로 접근

>>> lux = {'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}
#실행결과
>>> lux['health']
575.6

  • 키를 지정하지 않는 경우 전체를 의미

>>> lux = {'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}
#실행결과
>>> lux
{'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}

✔ 값 할당하기

  • 딕셔너리[키] = 값

>>> lux = {'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}
>>> lux['health'] = 300
#실행결과
>>> lux
{'health': 300, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}
# health의 값이 575.6에서 300으로 바뀜

  • 없는 키에 값을 할당하면 해당 키와값이 추가된다.

>>> lux = {'health': 300, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}
>>> lux['apple'] = 200
#실행결과
>>> lux
{'health': 300, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63, 'apple': 200}
# apple: 200이 추가되었다.

✔ 키 유무 확인

  • 키 in 딕셔너리

>>> lux = {'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}
#실행결과
>>> 'health' in lux
True
>>> 'speed' in lux
False

  • 키 not in 딕셔너리

>>> lux = {'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}
#실행결과
>>> 'speed' not in lux
True
>>> 'health' not in lux
False

✔ 키 개수 구하기

  • len(딕셔너리)
  • 1:1 대응 관계이므로 키와 값의 개수 동일

>>> lux = {'health': 575.6, 'health_regen': 1.7, 'mana': 338.8, 'mana_regen': 1.63}
#실행결과
>>> len(lux)
4

📌 참고

  • 해시 : 딕셔너리는 해시(Hash) 기법을 이용해서 데이터를 저장함. 보통 딕셔너리와 같은 키-값 형태의 자료형을 해시, 해시맵, 해시테이블 등으로 부르기도 함

✔ Nested Dictionary : dict 중첩사용으로 원하는 데이터 쉽게 가져오기

bts = {
    "RM": {
        "실명": "김남준",
        "가명": "RM",
        "생년월일": "1994년 9월 12일",
        "출생지": "대한민국 서울특별시 동작구 상도동",
        "학력": "글로벌사이버대학교 방송연예학과",
        "포지션": "리더 · 메인 래퍼"
    },
    "진": {
        "실명": "김석진",
        "가명": "진",
        "생년월일": "1992년 12월 4일",
        "출생지": "대한민국 경기도 과천시",
        "학력": "한양사이버대학교 대학원",
        "포지션": "서브 보컬"
    },
    "슈가": {
        "실명": "민윤기",
        "가명": "슈가",
        "생년월일": "1993년 3월 9일",
        "출생지": "대한민국 대구광역시 북구 태전동",
        "학력": "글로벌사이버대학교 방송연예학과",
        "포지션": "리드 래퍼"
    },
    "제이홉": {
        "실명": "정호석",
        "가명": "제이홉",
        "생년월일": "1994년 2월 18일",
        "출생지": "대한민국 광주광역시 북구 일곡동",
        "학력": "글로벌사이버대학교 방송연예학과",
        "포지션": "서브 래퍼 · 메인 댄서"
    },
    "지민": {
        "실명": "박지민",
        "가명": "지민",
        "생년월일": "1995년 10월 13일",
        "출생지": "대한민국 부산광역시 금정구 금사동",
        "학력": "글로벌사이버대학교 방송연예학과",
        "포지션": "리드 보컬 · 메인 댄서"
    },
    "뷔": {
        "실명": "김태형",
        "가명": "뷔",
        "생년월일": "1995년 12월 30일",
        "출생지": "대한민국 대구광역시 서구 비산동",
        "학력": "글로벌사이버대학교 방송연예학과",
        "포지션": "서브 보컬"
    },
    "정국": {
        "실명": "전정국",
        "가명": "정국",
        "생년월일": "1997년 9월 1일",
        "출생지": "대한민국 부산광역시 북구 만덕동",
        "학력": "글로벌사이버대학교 방송연예학과",
        "포지션": "메인 보컬 · 서브 래퍼 · 리드 댄서"
    }
}

print(bts["제이홉"]["생년월일"])
print(bts["뷔"])
#결과
(base)  ~/python   master ±✚  /usr/bin/python3 /home/hwang/python/test.py
1994218{'실명': '김태형', '가명': '뷔', '생년월일': '1995년 12월 30일', '출생지': '대한민국 대구광역시 서구 비산동', '학력': '글로벌사이버대학교 방송연예학과', '포지션': '서브 보컬'}

✔ Dict와 Set의 차이점

  • Dictionary와 마찬가지로 Set 또한 중괄호{}를 사용 하지만 Set의 경우 key : value 형식이 아닌 list와 같이 다양한 타입의 요소를 저장한다. {1, 2, 3}

  • Set의 경우 List와 같이 요소의 형식은 같지만 ordering이 없어 for문에서 읽어들이면 요소가 무작위로 나온다.

  • Set은 list와 달리 ordering이 없기 때문에 몇번째 요소를 읽어 들일 수 없다.

  • dict와 set은 중복이 불가해 dict의 경우 key값이 마지막 요소로 치환(replace)되고 set의 요소 또한 마지막 값으로 치환된다.

  • dict는 요소의 추가, 삭제를 키값으로 부여하고, Set은 내장함수를 이용한다.

# dict 요소 추가 예시
my_dict = {"one": 1, "two": 2}
my_dict["three"] = 3
del my_dict["two"] # key값 사용
print(my_dict)


>{"one": 1, "three": 3}
======================================================

# Set 요소 추가 예시
my_set = {1, 2, 3}
my_set.add(4)
my_set.remove(3)
print(my_set)

> {1, 2, 4}
post-custom-banner

0개의 댓글