Python 구조화된 데이터

ROK·2022년 1월 6일
0

일반적으로 데이터를 변수에 저장해서 프로그래밍을 한다.
숫자나 텍스트 같은 데이터는 number나 string 형태로 데이터를 저장하고, 연속열(Sequence)을 저장할 때는 배열(array)라는 자료 구조를 사용했다.
배열에는 대표적으로 리스트, 튜플이 있고, 간편하게 선형대수를 표현하기 위한 배열로 Numpy의 ndarray를 사용했다.

다음과 같은 형태의 데이터는 어떻게 저장할까?? 국제전화의 국가 번호 데이터를 저장한다면

Country_PhoneNumber
- Korea : 82
- America : 01
- Swiss : 41
- Italy : 39
- Japan : 81
- China : 86
- Rusia : 07
...

위 데이터에서 국가번호를 찾기 위해서 가장 간편한 방법은 단어로 값을 찾는 것이 가장 간편하다.
데이터 값을 찾을 때 인덱스가 아닌 "Korea", "America" 등과 같은 키(key)를 사용해 데이터에 접근하는 데이터 구조를 해시(hash)라고 한다.

Hash란 Key와 Value로 구성되어 있는 자료 구조로 두 개의 열만 갖지만 수많은 행을 가지는 구조체이다.

해시는 다른 프로그래밍 언어에서는 매핑(mapping), 연관배열(associative array)등으로 불리고, 파이썬에서는 딕셔너리(dictionary)로 불린다.

리마인드 : 파이썬 딕셔너리는 중괄호{}를 사용하고 키(key) : 값(value) 형태로 나타낸다

# 파이썬 딕셔너리로 표현한 전화번호부
Country_PhoneNumber = {'Korea': 82, 'America': 1, 'Swiss': 41, 'Italy': 39, 'Japan': 81, 'China': 86, 'Rusia': 7}
Country_PhoneNumber['Korea']

딕셔너리를 이용한 몇 가지 예제

게임회사에서 판타지 게임을 위한 로직을 만들고 있다.

플레이어가 보물 상자를 파밍했을 때, 보물 상자 안의 물품과 각 물품의 시세 은화를 보여주는 프로그램을 만든다고 한다면

  • 물품을 보여주는 함수
treasure_box = {'rope': 2, 'apple' : 10, 'torch' : 6, 'gold coin' : 50, 'knife' : 1, 'arrow' : 30}

def display_stuff(treasure_box):
	print("Congraturation!! you got a treasure box")
   	for k, v in treasure_box.items():
   		print("you have {} {}pcs".format(k, v))
        
display_stuff(treasure_box)
  • 물품을 통해 얻을 은화를 보여주는 함수
coin_per_treasure = {'rope': 1, 'apple' : 2, 'torch' : 2, 'gold coin' : 5, 'knife' : 30, 'arrow' : 1}

def total_silver(treasure_box, coin_per_treasure):
	total_coin = 0
   	for treasure in treasure_box:
   		coin = coin_per_treasure[treasure] * treasure_box[treasure]
		print("{}coins/pcs * {}pcs = {} coins".format(treasure, coin_per_treasure[treasure], treasure_box[treasure], coin))
        total_coin += coin
	print('total_coin : ', total_coin)
total_silver(treasure_box, coin_per_treasure)

보물상자 안에 물품과 갯수, 물품과 값(가치)를 각각 딕셔너리 형태로 저장하고, 동일한 단어를 키로 사용해서 각각의 데이터 값을 매칭했다.
데이터를 하나의 변수에 저장할 수도 있다. 딕셔너리의 딕셔너리 형태

treasure_box = {'rope' : {'coin' : 1, 'pcs' : 2},
		'apple' : {'coin' : 2, 'pcs' : 10},
		'torch' : {'coin' : 2, 'pcs' : 6},
		'gold coin' : {'coin' : 5, 'pcs' : 50},
		'knife' : {'coin' : 30, 'pcs' : 1},
		'arrow' : {'coin' : 1, 'pcs' : 30},
		}
        
treasure_box['rope']

구조화된 데이터

위 코드에서 treasure_box에 포함된 5개의 데이터는 내부적으로 coinpos라는 내부 구조를 가진다. 이렇게 데이터 내부에 자체적인 서브 구조를 가지는 데이터를 구조화된 데이터라 한다

위 코드 같은 데이터는 테이블(table) 형태로 전개된다. treasure_box 데이터는 5개의 행(row), 2개의 열(column)을 가진 데이터가 될 것이다.

profile
하루에 집중하자

0개의 댓글