Python - 딕셔너리 필터링, 3가지 방법

딕셔너리의 요소들을 key와 value에 대한 어떤 조건으로 필터링, 제거하는 방법을 소개합니다.

1. filter()를 이용한 방법

filter(lambda, items)lambda로 전달된 조건을 충족하는 요소들에 대한 iterator를 리턴합니다.

아래 예제에서 e[0]는 entry의 첫번째 요소 key를 의미하며, key가 0 이상인 요소들만 남기고 나머지는 제외시킵니다. Iterator를 리턴하기 때문에 딕셔너리로 만들고 싶으면 dict()에 Iterator를 전달하여 생성하면 됩니다.

my_dict = {-2: 'a', -1: 'b', 0: 'c', 1: 'd', 2: 'e'}

filtered = filter(lambda e: e[0] >= 0, my_dict.items())
print(filtered)

new_dict = dict(filtered)
print(new_dict)

Output:

<filter object at 0x7f4e00f2b3d0>
{0: 'c', 1: 'd', 2: 'e'}

만약 value를 조건으로 필터링하고 싶다면, value를 의미하는 e[1]에 대해서 조건식을 구현하면 됩니다.

my_dict = {-2: 'a', -1: 'b', 0: 'a', 1: 'd', 2: 'e'}

filtered = filter(lambda e: e[1] == 'a', my_dict.items())
new_dict = dict(filtered)
print(new_dict)

Output:

{-2: 'a', 0: 'a'}

2. Comprehension을 이용한 방법

Comprehension을 이용하여, 아래와 같이 코드 한줄로 특정 조건으로 필터링하는 코드를 구현할 수 있습니다.

아래 예제는 딕셔너리 요소들 중에 key가 0 이상인 요소들만 새로운 딕셔너리에 추가합니다.

my_dict = {-2: 'a', -1: 'b', 0: 'a', 1: 'd', 2: 'e'}

new_dict = {k: v for k, v in my_dict.items() if k >= 0}
print(new_dict)

Output:

{0: 'a', 1: 'd', 2: 'e'}

만약 value에 대한 조건으로 필터링하고 싶다면, 아래와 같이 구현할 수 있습니다.

my_dict = {-2: 'a', -1: 'b', 0: 'a', 1: 'd', 2: 'e'}

new_dict = {k: v for k, v in my_dict.items() if v == 'a'}
print(new_dict)

Output:

{-2: 'a', 0: 'a'}

3. for문을 이용한 방법

가장 간단하고 직관적인 방법으로, 반복문을 이용하여 key와 value를 순회하면서 특정 조건에 맞는 요소들을 필터링할 수 있습니다.

my_dict = {-2: 'a', -1: 'b', 0: 'a', 1: 'd', 2: 'e'}

new_dict = {}
for key, value in my_dict.items():
    if key >= 0:
        new_dict[key] = value

print(new_dict)

Output:

{0: 'a', 1: 'd', 2: 'e'}
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha