문제
파이썬 데이터를 만지작 하는 과정에서 아래와 같은 리스트를 만났습니다. 1번부터 3번까지 번호가 붙은 딕셔너리가 들어있는 리스트 입니다.
LIST_1 = [{‘NO’: ‘1’, ‘Category’: ‘Fruit’, ‘Name’: ‘Apple’, ‘Taste’: ‘Sweet’, ‘Num’: ‘5’}, {‘NO’: ‘2’, ‘name’: ‘Orange’, ‘Taste’: ‘SOUR’, ‘Color’: ‘Orange’, ‘Region’: ‘Florida’}, {‘NO’: ‘3’, ‘Category’: ‘Fruit’, ‘Name’: ‘Grape’, ‘NUM’: ‘5’, ‘Color’: ‘Purple’}]살펴보면 각각의 3개의 딕셔너리에는 중복되는 key도 있고, 어떤 딕셔너리에는 없는 key도 있습니다. 이 데이터를 json 형태처럼 각각의 딕셔너리는 모든 key를 가지지만 값이 없을 경우 ‘’ 공백으로 한번에 채울수는 없을까? 하는 문제입니다.
목표
목표는 위 LIST_1을 다음과 같이 만드는 것입니다.
LIST_2 = [{‘NO’: ‘1’, ‘Category’: ‘Fruit’, ‘Name’: ‘Apple’, ‘Taste’: ‘Sweet’, ‘Num’: ‘5’, ‘Color’: ‘ ‘Region:’ ‘}, {‘ NO ‘:’ 2 ‘,’ category ‘:’, ‘name’: ‘Orange’, ‘Taste’: ‘SOUR’, ‘Num’: ‘ : ‘Orange’, ‘Region’: ‘Florida’}, {‘NO’: ‘3’, ‘Category’: ‘Fruit’, ‘Name’: ‘Grape’, ‘Taste’: ‘,’ Num ‘: ‘5’, ‘color’: ‘purple’, ‘region’: ”}]보는것과 같이 리스트 안에 각각의 딕셔너리에는 같은 키값이 들어있습니다.
- NO
- Category
- Name
- Taste
- Num
- Color
- Region
LIST_1에서 값이 없는 키에는 ‘’ 공백을 값으로 주도록 하는 것입니다.
해법
다음은 해법 코드입니다.
keys = set().union(*LIST_1)
LIST_2 = [{key: d.get(key, ' ') for key in keys} for d in LIST_1]
여기서 키는 LIST_1의 모든 키 집합입니다. 목록 내포는 키와 동일한 키를 사용하여 LIST_1의 각 사전에 대한 새 사전을 만들고 누락된 키를 공백 문자로 채웁니다. 결과 사전 목록은 LIST_2에 할당됩니다.
[{‘Num’: ‘5’, ‘NO’: ‘1’, ‘Taste’: ‘Sweet’, ‘name’: ‘ ‘, ‘Category’: ‘Fruit’, ‘Color’: ‘ ‘, ‘NUM’: ‘ ‘, ‘Region’: ‘ ‘, ‘Name’: ‘Apple’}, {‘Num’: ‘ ‘, ‘NO’: ‘2’, ‘Taste’: ‘SOUR’, ‘name’: ‘Orange’, ‘Category’: ‘ ‘, ‘Color’: ‘Orange’, ‘NUM’: ‘ ‘, ‘Region’: ‘Florida’, ‘Name’: ‘ ‘}, {‘Num’: ‘ ‘, ‘NO’: ‘3’, ‘Taste’: ‘ ‘, ‘name’: ‘ ‘, ‘Category’: ‘Fruit’, ‘Color’: ‘Purple’, ‘NUM’: ‘5’, ‘Region’: ‘ ‘, ‘Name’: ‘Grape’}]코드를 실행하면 위과같은 결과를 얻을 수 있습니다. 목표했던 대로 모든 딕셔너리에 key값을 가지게 되었는데 순서가 뒤죽박중이네요. 다음 포스팅에서 key값을 내가 원하는 순서대로 정렬하기를 해보겠습니다.
댓글 남기기