key, value 형태의 순서와 중복이 보장되지 않는 자료형 입니다.

list vs tuple vs dictionary vs set

  list tuple dictionary set
순서 O O X X
중복 O O X X
변경 O X O O
형태 [1,2,3,4,5] (1,2,3,4,5) {“java”:10, “key”:5} {1, 2, 3}
type <class ‘list’> <class ‘tuple’> <class ‘dict’> <class ‘set’>

형태 {key:value, key:value,....}json 형태의 자료형
예)
a = {"배철수": 90, "안철수": 85, "인순이": 80}

기본 사용법

인덱스

a = {"배철수": 90, "안철수": 85, "인순이": 80}
print(a["배철수"])  # 90

# key=value형태로 생성
dic = dict(a=80, b=90, c=85)
print(dic)  # {'a': 80, 'b': 90, 'c': 85}

수정, 삭제

a = {"배철수": 90, "안철수": 85, "인순이": 80}

a["배철수"]= 100
print(a)   # {'배철수': 100, '안철수': 85, '인순이': 80}

a = {'배철수': 100, '안철수': 85, '인순이': 80}
a.update({'배철수': 90, '안철수': 80})
print(a) # {'배철수': 90, '안철수': 80, '인순이': 80}

del["배철수"]
print(a)   # {'안철수': 80, '인순이': 80}

수정 삭제 예외 처리


scores = {'배철수': 100, '안철수': 85, '인순이': 80}
v = scores.get("배철수")  # 100
v = scores.get("홍길동")  # None
#v = scores["홍길동"]      # 에러 발생
print(v)        # None
print(v == None )   # True

if "인순이" in scores:
    print("인순이 점수 : %d "%scores["인순이"]) # 인순이 점수 : 80 
 
scores.clear()  # 모두 삭제
print(scores) # {}

포함 판단 in

a = {"배철수": 90, "안철수": 85, "인순이": 80}
"배철수" in a   # True

순회

a = {"배철수": 90, "안철수": 85, "인순이": 80}
 
for key in a:
    val = a[key]
    print("%s : %d" % (key, val))

#출력
배철수 : 90
안철수 : 85
인순이 : 80

#items를 통한 순회
for k, v in a.items():
    print(k, v)

keys, values

a = {"배철수": 90, "안철수": 85, "인순이": 80}
 
# keys
keys = a.keys()
for k in keys:
    print(k)

# 출력
배철수
안철수
인순이


# values
values = a.values()
for v in values:
    print(v)

# 출력
90
85
80

keys

a = {"배철수": 90, "안철수": 85, "인순이": 80}
sort_a = sorted(a.keys())
print(sort_a) # ['배철수', '안철수', '인순이']

values

sort_a = sorted(a.values())
print(sort_a) # [60, 75, 80]

sort_a = sorted(a.values(), reverse=True)
print(sort_a) # [80, 75, 60]

(Lambda) 정렬

obj ={'배철수': 80, '안철수': 60, '인순이': 75}
sort_desc_obj = sorted(obj.items(), key=lambda x: x[0]) #x[0] key, x[1] value
print(sort_desc_obj)
# [('배철수', 80), ('안철수', 60), ('인순이', 75)]

obj = {'배철수': 80, '안철수': 60, '인순이': 75}
sort_desc_obj = sorted(obj.items(), key=lambda x: x[1]) #x[0] key, x[1] value
print(sort_desc_obj)
# [('안철수', 60), ('인순이', 75), ('배철수', 80)]

obj = {'배철수': 80, '안철수': 60, '인순이': 75}
sort_desc_obj = sorted(obj.items(), key=lambda x: x[1], reverse=True) #x[0] key, x[1] value
print(sort_desc_obj)
# [('배철수', 80), ('인순이', 75), ('안철수', 60)]

dict key, value 를 value : key 형태로 변환

id_name = {1: '배철수', 2: '안철수', 3: '인순이'}
name_id = {val:key for key,val in id_name.items()} 
print(name_id)  # {'배철수': 1, '안철수': 2, '인순이': 3}

두 리스트를 하나의 dict로 변환

list_k = ['aaa', 'bbb', 'ccc', 'ddd']
list_v = [10, 20, 30, 40]
new_dict = {key: value for key, value in zip(list_k, list_v)}
print(type(new_dict))   # <class 'dict'>
print(new_dict)  # {'aaa': 10, 'bbb': 20, 'ccc': 30, 'ddd': 40}

dict to tuple 변환

dict의 items()는 Dictonary의 키-값 쌍 Tuple 들로 구성된 dict_items 객체를 리턴

a = {'배철수': 80, '안철수': 60, '인순이': 75}
 
items = a.items()    # sorted(a.items()) 정렬지원
print(items) # dict_items([('배철수', 80), ('안철수', 60), ('인순이', 75)])

# dict_items를 리스트로 변환할 때
itemsList = list(items)
print(itemsList) # [('배철수', 80), ('안철수', 60), ('인순이', 75)]

tuple to dict 변환

persons = [('배철수', 80), ('안철수', 60), ('인순이', 75)]
mydict = dict(persons)
print(mydict)   # {'배철수': 80, '안철수': 60, '인순이': 75}

관련된 글 (python > lecture-python-basic)