본문 바로가기
Python/Python_basic

[Python] 딕셔너리

by Mr.DonyStark 2023. 11. 1.

□ 자료구조 딕셔너리 형태는 key와 value로 구성되어 있으며 { } 감쌈

□ 자주 사용하는 함수 : get(), values(), keys()

json과는 다름. json은 javascript에서의 오브젝트이며 데이터를 교환하기 위한 규약된 폼임

#에제: 딕셔너리 합산 구하기
dict = {'a':17, 'b':114, 'c':247, 'd':362, 'e':220, 'f':728, 'g':-283, 'h':922}
print(dict.values()) #딕셔너리 value 값 추출 : .values

#방법①
sum = 0
for i in dict:
    sum += dict[i]
print(f'sum : {sum}')

#방법②
total = 0
for a in dict.values():
    total += a
print(f'total : {total}')

#방법③
print(f'합 : {sum ([dict[item] for item in dict])}')
#딕셔너리 키/벨류 추가 : update
dict2 = {'a':'apple', 'b':'grape'}

#에제: 딕셔너리에 {'c':'banana', 'd':'kiwi'} 추가
#방법1
dict2['c'] = 'banana'
dict2['d'] = 'kiwi'
print(dict2)
#방법2
dict2.update({'c':'banana','d':'kiwi'})
print(dict2)

#value가 25인ㅇ이상인 값을 필터링 후 출력
dict3 = {'a':8, 'b':33, 'c':15, 'd':26, 'e':12, 'f':120}

#for문
new = {}
for k, v in dict3.items():       #.items()를 사용하면 키와 벨류를 쌍으로 얻을 수 있음 + 키와 벨류를 받을 파라미터 2개 설정
    if v >= 25:
        new[k] = v       
print(f'new: {new}')

#dict comprehension
dict2 = {k:v for k,v in dict3.items() if v >=20 }
print(f'dict2 comprehension: {dict2}')

#lambda + filter
new_dict2 = dict(filter(lambda v: v[1] >= 25, dict3.items()))         #키 v / 벨류 v[1] 의미
print(f'dict2 lambda: {new_dict2}')
#lterator : 순서대로 다음에 값을 반환할 수 있는 객체 또는 상태(자체적으로 next 메소드 내장, 반복가능한 객체, 순회하면서 처리)
#예제: 아래와 같이 출력하기
#key "one" has values [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] → total: 10
#key "two" has values [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22] → total: 12
#key "three" has values [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36] → total: 14 로 출력

d = dict(one = list(range(1,11)), two = list(range(11,23)), three = list(range(23,37)))

for i, b in d.items():
    print(f'key "{i}" has values {b} → total: {len(b)}')

'Python > Python_basic' 카테고리의 다른 글

[Python] 인자  (0) 2023.11.01
[Python] json 호출을 통한 pprint  (0) 2023.11.01
[Python] 중복제거(자료구조 set)  (0) 2023.11.01
[Python] 시퀀스 처리(For문, Lambda, List Comprehension)  (0) 2023.10.30
[Python] 에러타입  (0) 2023.10.30