4.3 리스트와 사전의 결합


리스트와 사전 자료구조는 각각 유용하지만, 두 구조를 결합한 것이 훨씬 더 유용하다. 결합의 예 중 하나는 리스트의 각 요소가 사전인 것이다. 또 다른 결합의 예는 사전의 값 중 적어도 한 개가 리스트 인 것이다.

 

4.3.1 A List of Dictionaries

사람들은 하나의 사례(책, 일기 예보, 지진)에도 관심이 있지만, 종종 사례들(아마존에서 이용 가능한 모든 책, 도시들의 일기 예보, 지난 한 달간의 모든 지진 기록들)의 리스트에 관심을 더 갖는다. 지금까지는 책 가격의 리스트, 일기 예보의 리스트, 지진 규모의 리스트 등, 개별적인 속성들의 리스트를 광범위하게 다루어왔다. 이제 각 리스트 항목이 간단한 기본 자료형(int, float, string, boolean)보다 더 간단할 수 있다는 것과 각각의 리스트 항목이 사전 값이 될 수 있다는 것을 보도록 하자.

 

사전 리스트의 간단한 예시는 다음 그림에 나와 있다. 아래의 표는 특정 도시에 대한 일기 예보의 추상화를 보여준다. 날씨의 추상화는 온도, 습도, 바람 세 가지 속성이 있다. 표의 각 행은 추상화의 각각의 사례를 나타낸다(예: 하나의 행이 하루의 일기예보).


../_images/Abstraction-Weather-Forecast.png
그림 4-7. 일기 예보 추상화의 도식적인 표현

 

도시, 온도, 습도, 바람의 속성은 개념적으로 다르고, 서로 다른 자료형을 포함하기 때문에, 각각의 사례를 표현하기 위해 사전을 사용할 것이다. 이것은 추상화 표를 나누는 것과, 사전으로 각각의 사례(추상화 표에서 각각의 행)를 나타내는 것을 포함한다. 사전의 도식적인 표현도 표이다. 아래 그림은 5일 동안의 일기 예보에 대한 단계를 보여준다.


../_images/Abstraction-To-Dictionary-Step.png
그림 4-8. 사전으로 각각의 사례를 표현한  것

 

텍스트 형식에서 각각의 사전은 다음과 같이 쓰일 수 있다:

{ 'temperature' : 30, 'humidity' : 20,  'wind' : 3}
{ 'temperature' : 25, 'humidity' : 50,  'wind' : 10}
{ 'temperature' : 29, 'humidity' : 100, 'wind' : 5}
{ 'temperature' : 18, 'humidity' : 90,  'wind' : 15}
{ 'temperature' : 24, 'humidity' : 30,  'wind' : 19}

 

이것은 추상화의 각 사례에 대한 하나의 사전을 보여준다.

 

다음 단계는 추상화의 모든 사례에 대한 하나의 집합을 표현하는 것이다. 이 경우, 표현하고자 하는 모든 항목들이 같은 구조라는 것을 알아야 한다. 즉, 모든 항목들은 키가 모두 동일한 집합으로 이루어진 사전이라는 것이다.

도식적으로, 값이 사전인 리스트는 다음 그림과 같이 나타난다.


../_images/Abstraction-List-Of-Dictionaries.png
그림 4-9. 추상화의 모든 사례를 표현하는 것

 

추상화의 모든 사례를 표현하는 것

텍스트 형식에서, 값이 사전인 리스트는 다음과 같이 나타날 것이다:

Blacksburg_Forecast = [
                         { 'temperature' : 30, 'humidity' : 20, 'wind' : 3} ,
                         { 'temperature' : 25, 'humidity' : 50, 'wind' : 10} ,
                         { 'temperature' : 29, 'humidity' : 100, 'wind' : 5} ,
                         { 'temperature' : 18, 'humidity' : 90, 'wind' : 15} ,
                         { 'temperature' : 24, 'humidity' : 30, 'wind' : 19} ,
                      ]

 

일기 예보 데이터가 리스트 안에 있기 때문에, 리스트의 각 요소에 접근하고 조작하기 위해서 반복이 사용될 수 있다. 유일한 차이점은 각각의 리스트의 반복으로부터 선택된 항목은 완전한 사전이라는 것이다. 다음의 Blockly 예시는 각각의 날씨 사전에서 바람의 속도 값이 출력 되는 방법을 보여준다.


../_images/Abstraction-Blockly-Iterating-List-Dictionaries.png

그림 4-10. 사전의 리스트를 통한 반복

 

이 예시에서, 반복에서 사용된 forecast 속성은 Blacksburg_Forecast에서 현재 선택된 리스트의 항목 값을 가진다. forecast 는 사전이다. get key from dict 블록은 forecast 사전에서 wind키과 관련된 값을 선택한다. 그러면 wind 키값이 출력 된다.

 

아래의 속성 창(Property Visualizer)을 살펴보면, Blacksburg_Forcast 의 속성 값이 리스트 형(type)인 것과 날씨 사전의 연속적인 사건으로 구성된 값을 가진 것을 볼 수 있을 것이다. 또한 forecast 속성이 사전형(type)이고, forecast 속성의 값은 반복의 마지막 단계에서 갖는 값이라는 것을 보게 될 수 있을 것이다(Blacksburg_Forcast 리스트의 마지막 사전).


../_images/Abstraction-Blockly-Property-Visualizer-List-Dictionaries.png
그림 4-11. 사전의 리스트를 통한 반복

 

4.3.2 값이 리스트인 사전

지금까지 예시는 값이 하나의 기본 자료형(type)인 키-값 쌍을 가졌다. 예를 들면, 기온 속성은 하나의 정수이며, 범죄율은 하나의 소수점 수이고, 도시의 이름은 하나의 문자열 이다. 그러나, 더 복잡한 방식이 가능하고, 필요하다.

 

사전의 키 값으로 리스트를 가질 수 있다는 것을 보게 될 것이다. 리스트 값인 속성을 보여주는 간단한 예시는 예보된 온도로부터 낮은 온도와 높은 온도를 구분하는 온도 예보의 추상화이다. 이 추상화는 다음 그림과 같이 highslows 두 개의 속성을 갖는다. highs 속성과 관련 있는 값은 예보된 고온들의 리스트이다. lows 속성은 예보된 저온들의 리스트이다. 각각의 온도는 하나의 정수로 나타낸다(int).


../_images/Abstraction-List-In-Dictionary.png
그림 4-12. 값이 리스트인 사전의 키들

 

Blockly에서, “get highs and lows in ”라고 이름 붙여진 날씨 블록은 선택된 도시에 대한 고온과 저온을 반환한다. 다음의 그림은 하나의 그래프 안에 선택된 도시의 고온과 저온을 선 그래프로 그리기 위한 Blockly 알고리즘

 

Multiple Choice 사전의 각각의 키에 대응하는 값은 리스트 자료형이 될 수 없다.


 

Multiple Choice 리스트의 각각의 요소들은 사전 자료형으로 나타낼 수 있다.


 

Multiple Choice Question Title
Blacksburg_Forecast의 자료형은 사전이다." opta="참." optb="거짓." ]

 

Multiple Choice Blacksburg_Forecast는 5개의 요소를 가지고 있다.


 

Multiple Choice Blacksburg_Forecast는 5개의 요소를 가지고 있다.


 

Multiple Choice 그림 4-10의 Blockly 코드를 보면 위의 for each블록의 반복은 Blacksburg_Forecast리스트 5개의 요소 모두에 한 번씩 적용된다.


 

Multiple Choice 그림 4-10의 Blockly 코드를 보면 위의 코드는 forecast 리스트의 키중 하나인 ‘wind’의 값을 출력하는 것이다.


Leave a Reply

Your email address will not be published. Required fields are marked *

*