03 Python Collection - (4) dict

처어리·2024년 1월 24일

python

목록 보기
24/36
post-thumbnail

04. dict

딕셔너리 ( dictionary )

  • dictionary 란 { } 로 둘러쌓여, 'key(키) : value(값)' 이 하나의 요소로 이루어진 collection 입니다. ( java 에서는 Map 입니다.)
  • key : 변경불가(immutable) -> 정수, 문자열
    value : 변경가능(mutable)
  • key 값은 중복될 수 없으며, 하나의 key 에는 하나의 value 만 포함될 수 있습니다.
  • dictionary 는 key 를 사용해서 값에 접근합니다.
  • dictionary 생성

    dict_1 = {}
    print(f"dict_1 {type(dict_1)}")
    print()
    dict_2 = dict()
    print(f"dict_2 {type(dict_2)}")
    print()
    num_dict = { 1:'one', 2:'two', 3:'three'}
    print(f"num_dict {num_dict}")
    print()
    onepiece_dict = { '루피': 14, '조로':11, '나미' : 7 }
    print(f"onepiece_dict {onepiece_dict}")
    print()


  • tuple 의 요소를 dict 의 key 로 사용할 수 있습니다.

    • 튜플을 먼저 생성하고 생성한 튜플에 딕트를 적용할 수 있습니다.

    size_tu = ('small', 'large')
    coffee_dict = { size_tu[0]:180, size_tu[1]: 2500 }
    print(f"커피 가격 : {coffee_dict}")
    print()


  • 하나의 요소가 tuple 로 이루어진 list 를 dict 에 적용할 수 있습니다.

    • 리스트 안의 한개의 요소가 튜플이 될 수 있습니다.

    tp_list = [('루피', 14), ('조로',11), ('나미', 8)]
    print(f"tp_list {tp_list}")
    print()

    • 튜플 리스트를 딕트로 만들 수 있습니다.

    tp_list_dict = dict(tp_list)
    print(f"tp_list_dict {tp_list_dict}")
    print()


  • dict 생성자에 'key=value' 를 parameter 로 해서 dict 를 생성할 수 있습니다.

    constructor_dict = dict(루피=7, 조로=5, 쵸파=3)
    print(f"constructor_dict  {constructor_dict}")

  • dict 생성시 중복된 key 가 있으면, 마지막 선언된 key 값 만이 사용됩니다.

    • 키값을 중복 처리해서 만들게 되면 마지막 값으로 딕트가 생성됩니다.

    dict_3 = {'a':1, 'b':2, 'a':3}
    print(f"dict_3 {dict_3}")
    print()

'''

dict 요소 사용

  • dict 안에 하나의 요소는 dict명[key] 로 사용합니다.

    - > key 값으로 변수를 사용해도 됩니다.

  • 없는 key 값을 사용하면 Error 입니다.

onepiece_lv = {'루피' : 14, '조로' : 11, '나미' : 7, '쵸파' : 6}
print(f"onepiece_lv {onepiece_lv}")
print(f"루피 레벨 : {onepiece_lv['루피']}")
print()

  • dict 안에 존재하는 key 에 값을 대입하면 수정됩니다.

    onepiece_lv['조로'] = 12
    print(f"조로 레벨 : {onepiece_lv['조로']}")
    print()

  • dict 안에 없는 키에 값을 대입하면 하나의 요소로 추가됩니다.

    onepiece_lv['로빈'] = 8
    print(f"onepiece_lv {onepiece_lv}")
    print()



dictionary 함수

onepiece_lv = {'루피' : 14, '조로' : 11, '나미' : 7, '쵸파' : 6}
print(f"onepiece_lv {onepiece_lv}")
print()

key 사용

  • dict 명.keys()

    • dictionary 의 key 만을 tuple 로 모아서 dict_keys 객체로 반환합니다.
    print(" .keys() ")
    print(onepiece_lv.keys())
    print()

  • for 문에 keys() 함수 적용

    • keys() 를 사용하면 for문으로 직접 접근이 가능합니다.

    print("for 문에 keys() 함수 적용")
    for k in onepiece_lv.keys():
        print(k)
    print()

  • dict_keys 객체를 list 로 변환

    • keys() 의 딕트 안의 값은 리스트로 되어 있기 때문에 리스트로 변환하여 사용할 수 있습니다.

    key_list = list(onepiece_lv.keys())
    print(f"key_list {key_list}")
    print()



value 사용

  • dict 명.values()

    • dictionary 의 values 만을 tuple 로 모아서 dict_values 객체로 반홥합니다.
    • 마찬가지로 리스트에 담아서 사용 가능합니다
    print(".values()")
    print(onepiece_lv.values())
    print()



item(key:value) 사용

  • dict 명.items()

    • key 와 value 의 쌍을 tuple 로 묶어서 dict_items 객체로 반환합니다.
    print(".items()")
    print(onepiece_lv.items())
    print()

    for item in onepiece_lv.items():
        # print(item)
        k, v = item         # 각각의 변수에 따로 접근
        print(f"{k} - {v}")
    print()



get()

  • dict 명.get( key, 'default value' )

    • key 를 사용해서 값을 반환합니다.
    • key 값이 없으면 Error 가 발생하지 않고, None 값을 반환합니다.
    • 찾는 key 값이 없을때 'default value' 를 지정할 수 있습니다.
    print(".get()")
    print(f"루피 : {onepiece_lv.get('루피')}")
    print(f"프랑키 : {onepiece_lv.get('프랑키')}")
    print(f"브룩 : {onepiece_lv.get('브룩', '없습니다~')}")
    print()



요소 추가

  • dict 명.setdefaults( key, value )

    • 하나의 요소를 추가합니다.

      • key 값이 없으면 추가되고, key 값이 있으면 추가되거나 value 값이 변경되지 않습니다.
    • 값이 없으면 추가됩니다.

    print(".setdefaults()")
    print(onepiece_lv.setdefault('브룩'))
    print(f"onepiece_lv {onepiece_lv}")
    print()

    • 값이 존재하면 추가되지 않습니다.

    print(onepiece_lv.setdefault('쵸파'))
    print(f"onepiece_lv {onepiece_lv}")
    print()

    • 값이 존재하면 수정되지 않습니다.

    print(onepiece_lv.setdefault('나미', 10))
    print(f"onepiece_lv {onepiece_lv}")
    print()



여러개의 요소 추가

  • dict 명.update( dictionary )

  • dict 명.update( { key:value }

    • dictionary 안에 여러개의 요소를 추가하거나 변경할 수 있습니다.
    • key 값이 없으면 'key:value' 를 추가하고, key 값이 있으면 value 값을 변경합니다.
     add_dict = {'프랑키':9, '나미': 11}
    onepiece_lv.update(add_dict)
    print(f"onepiece_lv {onepiece_lv}")
    print()

     onepiece_lv.update({'상디': 10})
    print(f"onepiece_lv {onepiece_lv}")
    print()



하나의 요소 삭제

  • dict 명.pop(key)

    • key 값을 사용해서 요소를 삭제합니다.
    • 삭제 key 값이 없으면 Error 입니다.
    print(".pop()")
    onepiece_lv.pop('조로')
    print(f"onepiece_lv {onepiece_lv}")
    print()


    # onepiece_lv.pop('로빈') # Error



순서대로 삭제

  • dict 명.popitem()

    • dictionary() 안에 저장된 데이터를 순서대로 하나의 요소(key:value)를 tuple 로 반환하면서 삭제합니다.
    print(".popitem()")
    print(f"삭제 {onepiece_lv.popitem()}")
    print(f"onepiece_lv {onepiece_lv}")



전체 삭제

  • dict 명.clear()

    • 모든 요소를 삭제하고 빈 자료형만 남습니다.
    print(".clear()")
    onepiece_lv.clear()
    print(f"onepiece_lv {onepiece_lv}")
    print()



{}.fromkeys( tuple or list, value )

  • tuple, list 의 요소를 key 값으로 설정하여 새로운 dictionary 를 생성할 수 있습니다.

    print("{}.fromkeys")
    key_list = [ 1, 2, 3, 4, 5 ]
    key_dict = {}.fromkeys(key_list)
    print(f"key_dict {key_dict}")
    print()

  • 생성시 value 값을 설정하지 않으면 default 값이 들어갑니다.

    key_tu = 1, 2, 3
    key_dict2 = {}.fromkeys(key_tu, 0)
    print(f"key_dict2 {key_dict2}")

  • in, not in 연산자를 이용해서 key 값의 존재 유무를 확인할 수 있습니다.

    check_dict = {}.fromkeys(['a', 'b', 'c'], 0)
    print(f"check_dict {check_dict}")
    print(f"a 확인 : {'a' in check_dict}")
    print(f"z 확인 : {'z' in check_dict}")
    print()



  • dict 활용 코드

person = dict()
info = list()

name = "손흥민"
info = ["30", "토트넘"]

person[name] = info
print(person)

data = person.get(name)
print(f"{name} 정보 : {data}")

key_data = ""
value_data = []
if name in person:
    for item in person.items():
        k, v = item
        if k == name:
            key_data = k
            value_data = v
else:
    print("없는 key ~")

if key_data != "":
    print(f"- {key_data} 님의 정보 -")
    print(f"나이 : {value_data[0]} 세")
    print(f"소속팀 : {value_data[1]}")
print()

0개의 댓글