PYTHON/기본 문법

PYTHON - 딕셔너리(dict), 세트(set)

seongjin08 2022. 11. 10. 17:52

딕셔너리 는 키(key) 와 값(value) 의 쌍으로 이루어진다.

dic = {}
dic['test'] = "test2"

print(dic)
# {'test': 'test2'}

print(dic['test'])
# test2

del dic['test']
print(dic)
# {}

딕셔너리의  키 또는 값 만 리스트로 가져오기

family = {'boy': 'choi', 'girl': 'kim', 'baby': 'choi'}

family             # 값을 넣는 순서대로 저장되지는 않음.
{'girl': 'kim', 'boy': 'choi', 'baby': 'choi'}

family.keys()      # 딕셔너리 family의 키들을 새로운 리스트에 담는다.
['girl', 'boy', 'baby']

family.values()    # family의 값들을 새로운 리스트에 담는다.
['kim', 'choi', 'choi']

딕셔너리 키가 있는지 체크 방법

'boy' in family
True

'sister' in family
False

 

연습 문제

 

숫자 읽기 (0~9) - 매게변수로 입력 받은 정수에 해당하는 한글 문자열로 반환 ,단 if 문을 사용하지말것

def korean_number():
    num = int(input())
    dic = {0:'영',1:'일',2:'이',3:'삼',4:'사',5:'오',6:'육',7:'칠',8:'팔',9:'구'}
    return dic[num]

if __name__ == '__main__':
    print( korean_number() )

ord() ,chr()  함수 

ord('A')
# 65
ord('Z')
# 90

chr(65)
# 'A'

ord('가')
# 44032
chr(55197)
# '힝'

딕셔너리에  key = 한국어  value = 영어 로 넣어라.

txt = '''신경발달장애 Neurodevelopmental Disorders
조현병 스펙트럼 및 기타 정신병적 장애 Schizophrenia Spectrum and Other Psychotic Disorders
양극성 및 관련 장애 Bipolar and Related Disorders
우울장애 Depressive Disorders
불안장애 Anxiety Disorder
강박 및 관련 장애 Obsessive-Compulsive and Related Disorders
외상 및 스트레스 관련 장애 Trauma-and Stressor-Related Disorders
해리장애 Dissociative Disorders
신체증상 및 관련 장애 Somatic Symptom and Related Disorders
급식 및 섭식장애 Feeding and Eating Disorders
배설장애 Elimination Disorders
수면-각성 장애 Sleep-Wake Disorders
성기능부전 Sexual Dysfunctions
성별 불쾌감 Gender Dysphoria
파괴적, 충동조절 및 품행 장애 Disruptive, Impulse-Control, and Conduct Disorders
물질관련 및 중독 장애 Substance-Related and Addictive Disorders
신경인지장애 Neurocognitive Disorders
성격장애 Personality Disorders
변태성욕장애 Paraphilic Disorders
기타 정신질환 Other Mental Disorders'''

disorders = dict()

is_eng = lambda x: 65 <= ord(x) <= 90 or 97 <= ord(x) <= 122

for l in txt.splitlines():
    i = 0
    while not is_eng(l[i]):
        i += 1
    else:
        ko, en = l[:i - 1], l[i:]
        disorders[ko] = en

print(disorders)

 

프랙털

0 과 1로 이루어진 문자열에서 정해진규칙에 맞게 다음 행 생성하기

colwidth = 61  # 문자열의 총 길이
rule90 = {'000':'0', '001':'1', '010':'0', '011':'1', '100':'1', '101':'0', '110':'1', '111':'0'}

half = colwidth // 2 # 총길이의 절반
line = '0' * half + '1' + '0' * half  # 첫 문단 가운데에 1 넣기  
print(line)  # 첫 출력 

while line[1] == '0':  # 문단의 두번째 글자가 0일때 멈춤
    prev = line
    line = '0' * colwidth # 0을 총 길이만큼 만들고 
    for i in range(1, colwidth - 1):  # 리스트 1이상 총길이 -1 미만 생성 후 반복문
        line = line[:i] + rule90[prev[i-1:i+2]] + line[i+1:]
        # 문단의  첫번째 + 첫번째부터 3개출력후 rule90 에서 체크 중간 문자 가져오기 + 세번째 이사부터 끝까지 
    print(line)

 

세트 (SET)

fruits = {'apple', 'banana', 'orange'}  
fruits.add('mango')     # 세트에 원소 추가 
{'orange', 'apple', 'mango', 'banana'}

companies = set()  # 빈 세트 생성

fruits & companies           # 교집합
{'apple'}
fruits | companies           # 합집합
{'apple', 'mango', 'microsoft', 'orange', 'google', 'banana'}

list_of_sets = [fruits, companies]
set.intersection(*list_of_sets)  # 교집합
{'apple'}
set.union(*list_of_sets)  # 합집합
{'google', 'apple', 'banana', 'mango', 'microsoft', 'orange'}

alphabet = list('google')
alphabet
['g', 'o', 'o', 'g', 'l', 'e']
set(alphabet)   # 세트는 중복되는 원소를 같지않고 순서 또한 유지하지 않는다
{'e', 'o', 'g', 'l'}

S1 = {1, 2, 3, 4, 5, 6, 7}
S2 = {3, 6, 9}
S1 - S2  # 집합끼리 뺄셈은 가능하다 
{1, 2, 4, 5, 7}

연습 문제 

두 주사위의 합을 중복되지 않게 출력 해보기

dice1 = (1, 2, 3, 4, 5, 6)
dice2 = (2, 3, 5, 7, 11, 13)

arr = set()
for a in dice1:
    for b in dice2:
        arr.add(a+b)

print(arr)

'PYTHON > 기본 문법' 카테고리의 다른 글

PYTHON - 튜플  (0) 2022.11.10
PYTHON - 문자열 리스트  (0) 2022.11.10
PYTHON - 데이터 타입  (0) 2022.11.08
PYTHON 기본 문법 (함수)  (0) 2022.11.08
PYTHON 기본 문법 ( for , match - case 문 )  (1) 2022.11.08