[python] Marshmallow를 사용한 데이터 필터링 및 정렬 처리 방법

마샬로우(Marshmallow)는 파이썬에서 사용되는 직렬화 및 역직렬화 라이브러리입니다. 이는 대규모의 데이터 집합을 다루는 경우 유용하며, 데이터 필터링 및 정렬과 같은 작업을 효과적으로 수행할 수 있습니다. 이번 블로그 포스트에서는 Marshmallow를 사용하여 데이터 필터링 및 정렬을 처리하는 방법을 알아보겠습니다.

1. 필터링 처리

Marshmallow는 필드를 사용하여 데이터를 필터링하는 기능을 제공합니다. 먼저 필요한 필드를 정의하고 필터링할 데이터에 해당 필드 값을 설정합니다. 다음은 Marshmallow를 사용하여 데이터 필터링을 처리하는 예제입니다.

from marshmallow import Schema, fields

# 데이터 스키마 정의
class PersonSchema(Schema):
    name = fields.String()
    age = fields.Integer()
    city = fields.String()

# 데이터 필터링
def filter_data(data, field, value):
    schema = PersonSchema()
    filtered_data = []
    for item in data:
        obj = schema.load(item)
        if getattr(obj, field) == value:
            filtered_data.append(item)
    return filtered_data

# 예제 데이터
data = [
    {"name": "Alice", "age": 25, "city": "Seoul"},
    {"name": "Bob", "age": 30, "city": "Busan"},
    {"name": "Charlie", "age": 35, "city": "Seoul"}
]

# 필터링 결과 출력
filtered_data = filter_data(data, "city", "Seoul")
print(filtered_data)

위 예제에서는 PersonSchema 클래스를 통해 데이터 스키마를 정의하고, filter_data 함수를 통해 데이터 필터링을 처리합니다. filter_data 함수는 데이터, 필터링할 필드 이름과 필터링할 값을 인자로 받아 조건에 맞는 데이터를 반환합니다.

2. 정렬 처리

Marshmallow를 사용하여 데이터를 정렬하는 것도 간단합니다. 필드의 dump_to 속성을 사용하여 데이터를 정렬하는데 사용할 필드 이름을 설정하면 됩니다. 아래는 Marshmallow를 사용하여 데이터를 정렬하는 예제입니다.

from marshmallow import Schema, fields

# 데이터 스키마 정의
class PersonSchema(Schema):
    name = fields.String(dump_to="sort_key")
    age = fields.Integer()
    city = fields.String()

# 데이터 정렬
def sort_data(data, field):
    schema = PersonSchema(many=True)
    sorted_data = sorted(data, key=lambda x: x[field])
    return schema.dump(sorted_data)

# 예제 데이터
data = [
    {"name": "Alice", "age": 25, "city": "Seoul"},
    {"name": "Bob", "age": 30, "city": "Busan"},
    {"name": "Charlie", "age": 35, "city": "Seoul"}
]

# 정렬 결과 출력
sorted_data = sort_data(data, "name")
print(sorted_data)

위 예제에서는 PersonSchema 클래스를 통해 데이터 스키마를 정의하고, sort_data 함수를 통해 데이터 정렬을 처리합니다. sort_data 함수는 데이터와 정렬할 필드 이름을 인자로 받아 필드 값을 기준으로 데이터를 정렬한 후 스키마를 통해 직렬화된 결과를 반환합니다.

결론

본 포스트에서는 Marshmallow를 사용하여 데이터 필터링 및 정렬을 처리하는 방법을 알아보았습니다. 마샬로우의 강력한 직렬화 및 역직렬화 기능은 데이터 처리 작업을 효율적으로 수행하는 데 큰 도움이 될 것입니다. Marshmallow의 다양한 기능과 유연성을 통해 데이터 작업을 보다 간편하게 처리할 수 있습니다.

참고 자료