Python - Complex Dictionary

pitbull terrier·2020년 6월 7일
0

Python

목록 보기
21/29

Complex Dictionary

전에 BTS의 멤버인 RM의 실명, 가명, 그리고 태어난 년도를 dictionary로 표현해 보았습니다.
하지만 BTS는 총 7명으로 구성되어 있습니다. 그렇다면 모든 BTS 멤버의 정보들을 표현하기 위해서는 어떻게 할 수 있을까요? 이제까지 보았던 dictionary 구조로는 모든 멤버를 한번에 표현하기 어려워 보입니다.

그래서 좀 더 복잡한 구조의 dictionary 형태를 보도록 하겠습니다.

List of Dictionaries

먼저 BTS 모든 멤버 7명을 다 표현하기 위해서는 각 멤버를 dictionary로 표현한 후 list로 같이 합하여 줌으로써 BTS의 모든 멤버를 표현 할 수 있습니다.

bts = [
{
"실명" : "김남준",
"가명" : "RM",
"생년월일" : "1994년 9월 12일",
"출생지" : "대한민국 서울특별시 동작구 상도동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "리더 · 메인 래퍼"
},
{
"실명" : "김석진",
"가명" : "진",
"생년월일" : "1992년 12월 4일",
"출생지" : "대한민국 경기도 과천시",
"학력" : "한양사이버대학교 대학원",
"포지션" : "서브 보컬"
},
{
"실명" : "민윤기",
"가명" : "슈가",
"생년월일" : "1993년 3월 9일",
"출생지" : "대한민국 대구광역시 북구 태전동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "리드 래퍼"
},
{
"실명" : "정호석",
"가명" : "제이홉",
"생년월일" : "1994년 2월 18일",
"출생지" : "대한민국 광주광역시 북구 일곡동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "서브 래퍼 · 메인 댄서"
},
{
"실명" : "박지민",
"가명" : "지민",
"생년월일" : "1995년 10월 13일",
"출생지" : "대한민국 부산광역시 금정구 금사동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "리드 보컬 · 메인 댄서"
},
{
"실명" : "김태형",
"가명" : "뷔",
"생년월일" : "1995년 12월 30일",
"출생지" : "대한민국 대구광역시 서구 비산동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "서브 보컬"
},
{
"실명" : "전정국",
"가명" : "정국",
"생년월일" : "1997년 9월 1일",
"출생지" : "대한민국 부산광역시 북구 만덕동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "메인 보컬 · 서브 래퍼 · 리드 댄서"
}
]

이렇게 list를 dictionary로 구성하면 손쉽게 여러 dictionary들을 grouping 할 수 있습니다.
그리고 for 구문을 사용하여 각각의 dictionary들을 읽어들이고 원하는 로직을 실행할 수 있습니다.

Nested Dictionary

만일 특정한 BTS 멤버의 정보를 읽고 싶다면 어떻게 해야 할까요? 앞서 본 list of dictionaries의 경우 for 구문을 통해서 모든 요소를 하나 하나 확인해 봐야 합니다. 예를 들어, 제이홉의 생년월일을 알고 싶다면 다음 처럼 구현해야 합니다.

for member in bts:
if member["가명"] == "제이홉":
print(member["생년월일"])

만일 list의 총 길이가 훨씬 더 길었다면 실행하는데 걸리는 시간이 길어질 것 입니다.

원하는 정보를 한번에 찾을 수 있다면 훨씬 더 편하고 효율적일 것입니다.
그래서 이 경우에는 nested dictionary를 사용할 수 있습니다.

bts = {
"RM": {
"실명" : "김남준",
"가명" : "RM",
"생년월일" : "1994년 9월 12일",
"출생지" : "대한민국 서울특별시 동작구 상도동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "리더 · 메인 래퍼"
},
"진": {
"실명" : "김석진",
"가명" : "진",
"생년월일" : "1992년 12월 4일",
"출생지" : "대한민국 경기도 과천시",
"학력" : "한양사이버대학교 대학원",
"포지션" : "서브 보컬"
},
"슈가": {
"실명" : "민윤기",
"가명" : "슈가",
"생년월일" : "1993년 3월 9일",
"출생지" : "대한민국 대구광역시 북구 태전동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "리드 래퍼"
},
"제이홉": {
"실명" : "정호석",
"가명" : "제이홉",
"생년월일" : "1994년 2월 18일",
"출생지" : "대한민국 광주광역시 북구 일곡동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "서브 래퍼 · 메인 댄서"
},
"지민": {
"실명" : "박지민",
"가명" : "지민",
"생년월일" : "1995년 10월 13일",
"출생지" : "대한민국 부산광역시 금정구 금사동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "리드 보컬 · 메인 댄서"
},
"뷔": {
"실명" : "김태형",
"가명" : "뷔",
"생년월일" : "1995년 12월 30일",
"출생지" : "대한민국 대구광역시 서구 비산동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "서브 보컬"
},
"정국": {
"실명" : "전정국",
"가명" : "정국",
"생년월일" : "1997년 9월 1일",
"출생지" : "대한민국 부산광역시 북구 만덕동",
"학력" : "글로벌사이버대학교 방송연예학과",
"포지션" : "메인 보컬 · 서브 래퍼 · 리드 댄서"
}
}

print(bts["제이홉"]["생년월일"])

이렇게 dictionary 안에 dictionary를 중첩적으로 사용하면 원하는 데이터를 더 효과적으로 표현하는 방법이 될 수 있습니다.

Assignment
다음은 우리나라 K리그 1, 2부의 축구팀 정보입니다.
Parameter로 주어진 축구팀의 다음 정보들을 dictionary로 리턴해주세요.

구단
연고지
리그참가
주 경기장

예를 들어, input으로 "강원 FC"가 주어지면 다음과 같은 dictionary가 리턴 되어야 합니다.

{
"구단": "강원 FC",
"리그참가": 2009,
"연고지": "강원도(춘천시)",
"주 경기장": "춘천송암레포츠타운"
}

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

    b = { 
        "경남 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 a:
        return a[team_name]
    elif team_name in b:
        return b[team_name] 
    else:
        return False   

profile
yoonbitnara.github.io

0개의 댓글