전에 BTS의 멤버인 RM의 실명, 가명, 그리고 태어난 년도를 dictionary로 표현해 보았습니다.
하지만 BTS는 총 7명으로 구성되어 있습니다. 그렇다면 모든 BTS 멤버의 정보들을 표현하기 위해서는 어떻게 할 수 있을까요? 이제까지 보았던 dictionary 구조로는 모든 멤버를 한번에 표현하기 어려워 보입니다.
그래서 좀 더 복잡한 구조의 dictionary 형태를 보도록 하겠습니다.
먼저 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들을 읽어들이고 원하는 로직을 실행할 수 있습니다.
만일 특정한 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