[wecode 4일차] - 딕셔너리(Python)

hyuckhoon.ko·2020년 5월 28일
0

What I learned in wecode

목록 보기
33/109

1. 딕셔너리 자료구조 활용 예제

1) unique-value갖는 '키' 출력하기

Q1.
Input 으로 주어진 리스트에서 오직 한번만 나타나는 값 (unique-value)을 가지고 있는 요소는 출력하시오.
Ex) 아래와 같은 리스트가 입력됐다면 [1, 2, 3, 4, 5, 1, 2, 3, 7, 9, 9, 7]
결과
4
5
가 나오게 하시오.

  • 목적 : 반복문(for loop)을 활용하여 element를 딕셔너리에 입력
  • 방법 : key에 element가 없으면 value = 1,
    key에 element가 있으면 value += 1
  • 출력 : dictionay.items() 메소드를 활용한 unique-value를 갖는 key값 출력
user_input = [ int(x) for x in input("쉼표를 사용하여 정수들을 입력하세요 : ").split(',')]

# empty 딕셔너리 정의 및 선언
new_dict = dict()
value = 0

for element in user_input:
  # element가 딕셔너리 '키'에 없다면
  if not element in new_dict.keys():
    new_dict[element] = 1
  # element가 딕셔너리 '키'에 이미 존재한다면
  else:
    new_dict[element] += 1
  
for number, value in new_dict.items():
  # value = 1에 해당하는 '키'는 모두 출력
  if value == 1:
    print(number)



2) 딕셔너리로 집합(set) 구현하기

Q2.
Input으로 문장 및 숫자를 입력받고 중복된 값을 제외하시오.
그 이후 집합에 값들을 입력하시오.

  • 목적 : 딕셔너리 메소드를 활용한 중복된 값을 제거
  • 방법 : dictionary.fromkeys() 활용
# user_input의 type은 'str'
user_input = input("")

# 문장에 있는 공백 제거
user_input = user_input.replace(" ","")

# 새로운 딕셔너리 선언(생성)
new_dict = dict().fromkeys(user_input)

new_set = set()
for element in new_dict:
    new_set.add(element)

print(new_set)

결과 {'0', '2', '9', '1', '3', 'r', '4'}


중복을 제외하기 위해 핵심적인 역할을 한 부분은 아래와 같다.

new_dict = dict().fromkeys(user_input)

이번엔 리스트 형태로 유저 인풋을 입력받았을 경우를 가정하여 구현해보자.

user_input = [x for x in input()]

# 리스트 값 중 공백 입력값 제거
user_input.remove(" ")

# 이하 동일
new_dict = dict().fromkeys(user_input)

new_set = set()
for element in new_dict:
    new_set.add(element)

print(new_set)




3) Nested 딕셔너리 활용한 k-리그 구단 정보 출력

Q3. 다음은 우리나라 K리그 1, 2부의 축구팀 정보입니다.
Parameter로 주어진 축구팀의 다음 정보들을 dictionary로 리턴해주세요.
예를 들어, input으로 "강원 FC"가 주어지면 다음과 같은 dictionary가 리턴 되어야 합니다.
{
"구단": "강원 FC",
"리그참가": 2009,
"연고지": "강원도(춘천시)",
"주 경기장": "춘천송암레포츠타운"
}

def get_team_info(team_name):
  ## 이 함수를 구현해주세요
    k_league1 = { 
        "강원 FC": {
        "구단": "강원 FC",
        "리그참가": 2009,
        "연고지": "강원도(춘천시)",   
        "주 경기장": "춘천송암레포츠타운"},
    "광주 FC": {
        "구단": "광주 FC",
        "리그참가": 2011,
        "연고지": "광주광역시",   
        "주 경기장": "광주월드컵경기장"},
    "대구 FC": {
        "구단": "대구 FC",
        "리그참가": 2003,
        "연고지": "대구광역시",   
        "주 경기장": "DGB대구은행 파크"},
    "부산 아이파크": {
        "구단": "부산 아이파크",
        "리그참가": 1983,
        "연고지": "부산광역시",   
        "주 경기장": "구덕운동장"},
    "상주 상무": {
        "구단": "상주 상무",
        "리그참가": 2011,
        "연고지": "상주시",   
        "주 경기장": "상주시민운동장"},
    "FC 서울": {
        "구단": "FC 서울",
        "리그참가": 1984,
        "연고지": "서울특별시",   
        "주 경기장": "서울월드컵경기장"},
    "성남 FC": {
        "구단": "성남 FC",
        "리그참가": 1989,
        "연고지": "성남시",   
        "주 경기장": "탄천종합운동장"},
    "수원 삼성 블루윙즈": {
        "구단": "수원 삼성 블루윙즈",
        "리그참가": 1996,
        "연고지": "수원시",   
        "주 경기장": "수원월드컵경기장"},
    "울산 현대": {
        "구단": "울산 현대",
        "리그참가": 1984,
        "연고지": "울산광역시",   
        "주 경기장": "울산문수축구경기장"},
    "인천 유나이티드": {
        "구단": "인천 유나이티드",
        "리그참가": 2004,
        "연고지": "인천광역시",   
        "주 경기장": "인천축구전용경기장"},
    "전북 현대 모터스": {
        "구단": "전북 현대 모터스",
        "리그참가": 1995,
        "연고지": "전라북도(전주시)",   
        "주 경기장": "전주월드컵경기장"},
    "포항 스틸러스": {
        "구단": "포항 스틸러스",
        "리그참가": 1983,
        "연고지": "포항시",   
        "주 경기장": "포항스틸야드"}          
  }

    k_league2 = { 
        "경남 FC": {
        "구단": "경남 FC",
        "리그참가": 2006,
        "연고지": "경상남도(창원시)",   
        "주 경기장": "창원축구센터"},
    "대전 하나 시티즌": {
        "구단": "대전 하나 시티즌",
        "리그참가": 1997,
        "연고지": "대전광역시",   
        "주 경기장": "대전월드컵경기장"},
    "부천 FC 1995": {
        "구단": "부천 FC 1995",
        "리그참가": 2013,
        "연고지": "부천시",   
        "주 경기장": "부천종합운동장"},
    "서울 이랜드": {
        "구단": "서울 이랜드",
        "리그참가": 2015,
        "연고지": "서울특별시",   
        "주 경기장": "서울올림픽주경기장"},
    "수원 FC": {
        "구단": "수원 FC",
        "리그참가": 2013,
        "연고지": "수원시",   
        "주 경기장": "수원종합운동장"},
    "충남 아산 FC": {
        "구단": "충남 아산 FC",
        "리그참가": 2020,
        "연고지": "아산시",   
        "주 경기장": "이순신종합운동장"},
    "안산 그리너스": {
        "구단": "안산 그리너스",
        "리그참가": 2017,
        "연고지": "안산시",   
        "주 경기장": "안산 와~스타디움"},
    "FC 안양": {
        "구단": "FC 안양",
        "리그참가": 2013,
        "연고지": "안양시",   
        "주 경기장": "안양종합운동장"},
    "전남 드래곤즈": {
        "구단": "전남 드래곤즈",
        "리그참가": 1995,
        "연고지": "전라남도(광양시)",   
        "주 경기장": "광양축구전용구장"},
    "제주 유나이티드": {
        "구단": "제주 유나이티드",
        "리그참가": 1983,
        "연고지": "제주특별자치도(서귀포시)",   
        "주 경기장": "제주월드컵경기장"}
    }
    if team_name in k_league1:
        return k_league1[team_name]
    elif team_name in k_league2:
        return k_league2[team_name] 
    else:
        return False   


# 제주 유나이티드 구단 정보 입력
result = get_team_info("제주 유나이티드")
if result == False:
    print("입력하신 구단은 없습니다.")
print(result)

결과
{'구단': '제주 유나이티드', '리그참가': 1983, '연고지': '제주특별자치도(서귀포시)', '주 경기장': '제주월드컵경기장'}




2. <참고> '딕셔너리'의 특징

  • [1] key의 자료형이 int인 경우
  • [2] key의 자료형이 str인 경우
  • value를 '읽기'(=접근)할 때, 유의해야 한다.
#########
# case 1#
#########
# [1] key의 자료형이 int형인 경우
int_dict = {1 : 1, 2 : 2, 3 : 3}
print(int_dict)
print(int_dict.items())

# 읽기 --> 정수 1 입력
print(int_dict[1])
print(type(int_dict[1]))



#########
# case 2#
#########
# [2] key의 자료형이 str형인 경우
str_dict = {'1' : 1, '2' : 2, '3' :  3}
print(str_dict)
print(str_dict.items())

# 읽기 --> 문자 '1' 입력
print(str_dict['1'])
print(type(str_dict['1']))




                                     - One step at a time - 

0개의 댓글