본문 바로가기
프로그래밍/파이썬기초

파이썬 딕셔너리와 리스트 예제 : 리스트를 딕셔너리로, 딕셔너리 안에 딕셔너리

by 조크리 2023. 11. 7.
반응형

 

 

안녕하세요!

지난 글에서 딕셔너리를 쭉 살펴보았습니다.

파이썬 딕셔너리(dictionary) 사용법: 딕셔너리 만들기, 딕셔너리 데이터 추가하기, value값 출력하기

 

파이썬 딕셔너리(dictionary) 사용법: 딕셔너리 만들기, 딕셔너리 데이터 추가하기, value값 출력하기

이번 글에서는 파이썬의 딕셔너리 사용법에 대해 알아보겠습니다. 목차 1. 딕셔너리(dictionary)란? 리스트는 항목들을 모아놓은 것이며 순서가 있습니다. 순서를 인덱싱 이라고 하죠. 파이썬 리스

creatorjo.tistory.com

 

 

이번 글에서는 리스트와 딕셔너리가 함께 사용되는

예제들을 살펴보겠습니다. 

 

 
 


목차

     

     

    1. 리스트의 값들을 딕셔너리로 출력하기

     

    아래 코드를 살펴보면

    좋아하는 화가 투표 리스트가 votes =[] 라는 리스트로 나타나 있습니다. 

    이 리스트에는 중복되는 화가들의 이름도 많이 보입니다. 

     

    이제 이 리스트를

    후보별 득표수를 나타내는 딕셔너리로 새롭게 만들어보겠습니다. 

     

    counter = {}

    라는 딕셔너리를 만들어주고

     

    for반복문을 사용해 후보별 득표수를 딕셔너리로 만들어보겠습니다. 

     

    우선 for반복문에서는 votes라는 리스트안의 항목들을 쭉 돌면서

    if(조건문)으로 내려가게 됩니다.

    첫 번째 항목 '피카소'를 살펴보겠습니다.

    만약 '피카소'가 counter 라는 딕셔너리에 없다면

    counter['피카소'] = 1 으로 기록됩니다. 

     

    두 번째 항목인 마티스, 세번째 항목인 고흐도 마찬가지로 기록이 되었겠죠?

    그 다음 네 번째 항목은 다시 '고흐' 입니다.

    이제 counter라는 딕셔너리에는 '고흐'라는 항목이 key값으로 있습니다.

     

    그렇기 때문에 조건문의 else로 내려가야겠죠.

    else로 내려가보니 counter['고흐']  += 1 이라고 적혀있네요.

    즉 value값에 1을 더하면 되는 겁니다. 

     

    이렇게 voter리스트 안의 항목을 쭉 반복문으로 돌면서

    그 값들을 판별하다보면

    화가의 이름과 득표수가 딕셔너리에 저장되게 됩니다. 

    #투표 결과 리스트
    votes = ['피카소', '마티스', '고흐', '고흐', '고갱', '마티스', '마티스', '피카소', '고갱', '고흐', '마티스', '고갱']
    
    
    #후보별 득표수 딕셔너리 새로 만들기
    counter = {}
    
    #리스트를 이용해 counter를 정리하기
    #for반복문을 사용하여 후보별 득표수를 딕셔너리로 만들기
    for name in votes:
      if name not in counter:
        counter[name] = 1
      else:
        counter[name] += 1
    
    #후보별 득표수 출력

     

     

    2. 딕셔너리 안에 딕셔너리

     

    이번에는 딕셔너리 안에 딕셔너리가 있는 예제를 살펴보겠습니다. 

    태양계 딕셔너리를 살펴보겠습니다. 

     

    가장 큰 딕셔너리는

    terrestrial_plane = {} 이라는 딕셔너리 입니다.

     

    이 딕셔너리 안에는 작은 딕셔너리가 4개가 들어있죠.

    Mercury, Venus, Earth, Mars 이렇게 4개의 딕셔너리가 각각 들어있습니다. 

    작은 딕셔너리를 살펴보면

    mean_radius(반지름), mass(질량), orbital_period(종전주기)각 각각 key와 value로 들어가 있습니다. 

     

    그럼 이 딕셔너리에서 venus 딕셔너리의 mean_radius를 출력해볼까요?

    이렇게 출력해주면 됩니다. 

    print(terrestrial_planet['Venus']['mean_radius'])
    terrestrial_planet = {
    	'Mercury': {
        	'mean_radius': 2439.7,
        	'mass': 3.3022E+23,
        	'orbital_period': 87.969
    	},
    	'Venus': {
        	'mean_radius': 6051.8,
        	'mass': 4.8676E+24,
        	'orbital_period': 224.70069,
    	},
    	'Earth': {
        	'mean_radius': 6371.0,
        	'mass': 5.97219E+24,
        	'orbital_period': 365.25641,
    	},
    	'Mars': {
        	'mean_radius': 3389.5,
        	'mass': 6.4185E+23,
        	'orbital_period': 686.9600,
    	}
    }
     
    print(terrestrial_planet['Venus']['mean_radius'])	# 6051.8

     

     

    2. 태양계 행성의 반지름만 새로운 딕셔너리로 만들기

     

    그럼 

    planet_mean_radius = {} 라는 새로운 딕셔너리를 만들어보겠습니다. 

    이 새로운 딕셔너리는

     

    Mercury, Venus, Earth, Mars라는 각각의 행성의 반지름만 뽑아온 딕셔너리입니다. 

     

    이렇게 결과가 나오는 딕셔너리이죠. 

     

     

    이를 위한 코드를 살펴보겠습니다. 

    우선 planet_mean_radius = {} 라고 새로운 딕셔너리를 만들어 줍니다.

     

    그리고 

    for반복문과 if 문으로 필요한 key와 value값을 뽑아오겠습니다.

     

    일단 for반복문을 돌려서

    전체 terrestrial_planet.keys() 를 쭉 살펴봅니다.

    Mercury가 가장 먼저 살펴볼 name이 되겠죠?

     

    이제 Mercury가 새로운 planet_mean_radius = {}  딕셔너리에 없다면

    planet_mean_radius['Mercury'] 의 value 값을 찾아서 추가해주면 됩니다. 

     

    그 value 값은

    terrestrial_planet['Mercury']['mean_radius']

    가 되는 것이죠.

     

    이런식으로 Mercury, Venus, Earth, Mars 4개의 key값을 반복문으로 살펴봅니다. 

    그럼 태양계 행성 4개의 이름이 key값으로 들어가고, 반지름이 value 값으로 들어간

    새로운 딕셔너리가 만들어지게 됩니다. 

    #새로운 딕셔너리 만듦
    planet_mean_radius = {}
    
    #for반복문으로
    for name in terrestrial_planet.keys():
      if name not in planet_mean_radius:
        planet_mean_radius[name] = terrestrial_planet[name]['mean_radius']
    
    print('태양계 행성의 반지름: ')
    print(planet_mean_radius)

     

     

     

    3. 딕셔너리 안에 딕셔너리: 유럽 국가 여행 정보 딕셔너리

     

    비슷한 예제를 하나 더 살펴보겠습니다.

    바로 유럽 국가 딕셔너리에서

    각 나라의 여행 포인트(travelpoint)를 딕셔너리로 출력하는 예제입니다. 

     

    이렇게 이탈리아, 프랑스, 스위스, 독일 4개의 나라가 

    작은 딕셔너리로 들어가 있는데, 각 나라의 travelpoint를 뽑아서 딕셔너리 형태로 출력해주는 것이죠. 

     

     

    전체 딕셔너리는

    Europe = {} 이라는 딕셔너리입니다.

    그 안에 작은 Italy, France, Swiss, Germany 라는 4개의 딕셔너리가 들어있습니다. 

    각 딕셔너리에는 수도, 기념품, 여행 포인트가 key와 value로 들어가 있습니다. 

     

    이제 여기서 각 나라의 이름을 key로, 여행 포인트를 value로 갖는

    새로운 딕셔너리는 만들어줍니다. 

     

    그리고 for반복문을 통해 

    딕셔너리의 각 항목을 돌면서

    travelpoint value값을 뽑아옵니다. 

    #유럽 국가 딕셔너리 만들고, 각 나라의 여행 포인트 출력하기
    Europe = {
      'Italy': {
          'capital city': 'Rome',
          'famous souvenir': 'coffechocolate',
          'travelpoint': 'Fountain Trevi'
      },
      'France': {
          'capital city': 'Paris',
          'famous souvenir': 'macaron',
          'travelpoint': '3course dinner',
      },
      'Swiss': {
          'capital city': 'Bern',
          'famous souvenir': 'cheese',
          'travelpoint': 'Alps',
      },
      'Germany': {
          'capital city': 'Berlin',
          'famous souvenir': 'beer',
          'travelpoint': '...?',
      }
    }
    
    travelpoint = {}
    for i in Europe:
      if i not in travelpoint:
       travelpoint[i] = Europe[i]['travelpoint']
       
    print('유럽 각국의 여행 포인트: {}'.format(travelpoint))

     

    출력 결과

    아래와 같이 작동되는 것을 확인할 수 있습니다. 

    반응형