** 파이썬

*자료구조

### 딕셔너리(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

+ Recent posts