** 파이썬
*자료구조
### 딕셔너리(dictionary) : 자바의 map이랑 비슷함
1. 딕셔너리에 데이터를 저장할 때는 key와 value(=data)를 같이 저장한다.
2. 딕셔너리는 순차적인 자료구조가 아니다.
3. 딕셔너리의 데이터를 구해올때는 key를 이용해서 데이터를 구해온다.
4. 1개의 딕셔너리에 key는 1개만 사용 가능하다. -> 중복 저장은 되지만 사용은 하나만!
1개의 딕셔너리에 동일한 이름을 가진 key가 여러개 존재하면, 가장 마지막의 key만 사용 가능하다.
-> 결국 하나만 사용 가능해지는 것
5. key는 수정할 수 없지만 value는 수정 가능하다.
# 함수
names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245 , 'Michale':27115, 'Bob':5887, 'Kelly':7855}
1. keys() : 딕셔너리의 key를 구해주는 함수
for k in names.keys(): ---> key만 가져와서 k에 넣고 반복문 돌리는 것
# print('Key:%s\t Value:%d'%(k, names[k]))
# print('Key:', k, ' Value:', names[k])
print('Key:{0} Value:{1}'.format(k, names[k])) ---> k에 key가 있고 names에 해당 key의 value가 있음
2. values() : 딕셔너리의 value를 구해주는 함수
result = names.values()
print(type(result)) # <class 'dict_values'>
print(result) # dict_values([10999, 2111, 9778, 20245, 27115, 5887, 7855])
3. list() : 딕셔너리의 value를 리스트로 만들어주는 함수
list = list(result)
print(type(list)) # <class 'list'>
print(list) # [10999, 2111, 9778, 20245, 27115, 5887, 7855]
---- 리스트로 만드는 이유 : 리스트에서 사용할 수 있는 함수를 사용하기 위해서!
count = sum(list)
print('총 출생아수:%d'%count) # 총 출생아수:83990
4. items() : 딕셔너리의 key와 value를 모두 구해주는 함수
for item in names.items():
print(item) # ('Mary', 10999)
# ('Sams', 2111)
# ...
for k, v in names.items(): ---> key랑 value를 분리해서 저장할 수도 있음!
print(k,':',v) # Mary : 10999
# Sams : 2111
# ...
# 딕셔너리 값 수정
names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245 , 'Michale':27115, 'Bob':5887, 'Kelly':7855}
print(names['Aimy']) # 9778
print(names.get('Aimy')) # 9778
names['Aimy'] = 10000 ---> names 딕셔너리의 key가 'Aimy'인 value값을 변경!
print(names['Aimy']) # 10000
# 딕셔너리 데이터 삭제 : del 명령
# names 딕셔너리 에서 key가 'Sams', 'Bob' 인 원소 삭제
del names['Sams']
del names['Bob']
print(names) #{'Mary': 10999, 'Aimy': 9778, 'Tom': 20245, 'Michale': 27115, 'Kelly': 7855}
# 딕셔너리의 모든 원소를 삭제 : clear() 함수
names.clear()
print(names) # 비어있는 딕셔너리 : {}
※ mydic = {} # 비어있는 딕셔너리 선언
# 멤버연산자 in 을 이용하여 특정 값이 딕셔너리의 key로 존재하는지 확인 하는 프로그램 작성
names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245 , 'Michale':27115, 'Bob':5887, 'Kelly':7855}
k = input('아기이름을 입력하세요?')
if k in names: # 키보드로 입력한 이름이 딕셔너리의 key에 존재하면 True 리턴
print('이름이 %s인 출생아수는 %d명 입니다.'%(k, names[k])) # names[k]=value
else: #키보드로 입력한 이름이 key에 존재하지 않으면 그 key에 value값 1000인 딕셔너리 원소를 추가!
print('자료에 %s인 이름이 존재하지 않습니다.'%k)
names[k] = 1000;
# 딕셔너리의 정렬 : sorted() 함수 --- key로 정렬하거나, value로 정렬하거나 해야 함
names = {'Mary':10999, 'Sams':2111, 'Aimy':9778, 'Tom':20245 , 'Michale':27115, 'Bob':5887, 'Kelly':7855}
0. 딕셔너리의 key와 value를 리턴하는 함수를 정의
def f1(x): # 매개변수의 인덱스 0번을 리턴 --- f1에 딕셔너리를 넣으면 0=key가 리턴
return x[0]
def f2(x): # 매개변수의 인덱스 1번을 리턴 --- f2에 딕셔너리를 넣으면 value가 리턴
return x[1]
1. key를 기준으로 정렬
1-1. 오름차순
result1 = sorted(names) --- 따로 정의하지 않으면 key 기준으로 오름차순 정렬됨
print('result1:', result1) # ['Aimy', 'Bob', 'Kelly', 'Mary', 'Michale', 'Sams', 'Tom']
result2 = sorted(names.items(), key=f1)
---items()=key, value 모두 가져와서, 정렬 기준(key)은 f1으로 리턴받은 값을 기준으로 함
---f1은 names.items()를 매개변수로 받아 그 중 인덱스 0번 = 딕셔너리의 key를 리턴
--->> 즉 딕셔너리의 key를 기준으로 정렬하게 됨
print('result2:', result2) # [('Aimy', 9778), ('Bob', 5887), ('Kelly', 7855), ('Mary', 10999), ('Michale', 27115), 'Tom']
1-2. 내림차순
result3 = sorted(names, reverse=True)
print('result3:', result3) # ['Tom', 'Sams', 'Michale', 'Mary', 'Kelly', 'Bob', 'Aimy']
result4 = sorted(names.items(), reverse=True , key=f1)
print('result4:', result4) # [('Tom', 20245), ('Sams', 2111), ('Michale', 27115), ('Mary', 10999), ('Kelly', 7855)y']
2. value를 기준으로 정렬
2-1. 오름차순
result5 = sorted(names.items(), key=f2)
---items()=key, value 모두 가져와서, 정렬 기준(key)은 f2으로 리턴받은 값을 기준으로 함
---f1은 names.items()를 매개변수로 받아 그 중 인덱스 1번 = 딕셔너리의 value를 리턴
--->> 즉 딕셔너리의 value를 기준으로 정렬하게 됨
print('result5:', result5) # [('Sams', 2111), ('Bob', 5887), ('Kelly', 7855), ('Aimy', 9778), ('Mary', 10999),
2-2. 내림차순
result6 = sorted(names.items(), reverse=True , key=f2)
print('result6:', result6) # [('Michale', 27115), ('Tom', 20245), ('Mary', 10999), ('Aimy', 9778), ('Kelly', 7855)
### 함수function
: 여러 개의 문장을 하나로 묶은 단위 --- 하나의 이름으로 묶어 호출해 사용하기 위함
: 반복적으로 호출해 실행 가능 --- 재사용성 + 프로그램을 논리적으로 구성할 수 있음
def 함수명(인수들):
문장
return 값
### 파이썬의 함수
1. 파이썬에서 함수는 def 키워드로 정의한다.
2. 함수는 위에서 정의를 하고, 아래에서 호출해야 한다. (순서가 바뀌면 오류 발생)
#매개변수 없는 함수
def hello(): #정의만 해둔것. 정의만 했을 땐 정의한 내용이 실행되지 않음!
print('함수 호출 성공')
hello() #위에서 정의해둔 '함수 호출 성공' 이라는 문장이 출력됨
#매개변수 있는 함수
def abs(n): # n : 매개변수(parameter)
if n < 0:
n = -n
return n # return문 : 함수를 호출한 곳에 값을 돌려주는 역할
abs(-30)
print('돌려 받은값1:', abs(-30)) # 30
result = abs(50) --- (n>0이라 그대로 출력)
print('돌려 받은값2:', result) # 50
'수업 > 정리' 카테고리의 다른 글
220531 Python -10 (0) | 2022.06.01 |
---|---|
220530 Python -9 함수, lambda, map, filter (0) | 2022.05.30 |
220526 docker -6 tomcat (0) | 2022.05.26 |
220525 docker -5 java, tomcat (0) | 2022.05.25 |
220524 docker -4 Python 설치, 마운트 (0) | 2022.05.24 |