티스토리 뷰

728x90
반응형

 

 

한국어로 표현하면 뭐라고 해야할 지 고민이 됩니다.

딕셔너리에서 여러 개의 key들이 존재하는 지 확인하는 방법. 

딕셔너리에서 여러 단어들이 딕셔너리의 key 값으로 존재하는 지 확인하는 방법.

영어로 표현하면 그냥 간단히 check if lists of keys exist in dictionary 라고 할 수 있겠는데요. 

 

https://stackoverflow.com/questions/10995172/check-if-list-of-keys-exist-in-dictionary

 

Check if list of keys exist in dictionary

I have a dictionary that looks like that: grades = { 'alex' : 11, 'bob' : 10, 'john' : 14, 'peter': 7 } and a list of names students = ('alex', 'john') I ...

stackoverflow.com

찾아본 바에 의하면 check if lists of keys exists in dictionary 라는 질문의 답변으로 위 글에서 설명하고 있었습니다.

 

다시 위 내용을 정리하자면 아래와 같이 사용할 수 있는데요!

a = {"name":"hello", "type":"haha"}
set(a).issubset(('name', 'test')) // False

a = {"name":"hello", "type":"haha"}
set(a).issubset(('name', 'type')) // True

위 코드에서는 a 라는 딕셔너리(dictionary)에 name 과 test 라는 key 가 모두 있는 지 확인해서 하나라도 빠졌다면 False 값을 반환하게 되는 코드입니다.

그리고 그 바로 아래 코드에서는 name 과 type 이라는 key 가 모두 있기 때문에 True 값을 반환합니다.

 

위처럼 코드를 작성해도 우리가 원하는 목적은 달성할 수 있습니다. 하지만 위에 제가 링크한 글에서는 성능상으로 비효율적이라고 합니다. 대안으로 all() 함수를 사용하라고 했는데요. 아래 코드를 보겠습니다.

a = {"name":"hello", "type":"haha"}
all([x in a for x in ['name','type']]) // True

a = {"name":"hello", "type":"haha"}
all([x in a for x in ['name','test']]) // False

all() 함수 안에 인자값으로 들어온 배열이 모두 True 값을 가지고 있다면 True 값을 반환합니다.

우선 [x in a for x in ['name', 'type']] 의 결과 값은 [True, True] 가 됩니다.

그리고 바로 아래 코드에서는 결과 값으로 test 가 와야할 곳에 type 이 와서 불일치함으로 [True, False] 배열이 만들어집니다. 그리고 이 배열이 all() 함수 안에 들어가면 하나라도 False 가 들어가면 False 를 반환하게 됩니다.

 

사실 위 예제에서는 설명하기 위해서 2개의 key 값이 있는 dictionary 형을 사용했지, 실제로는 여러 key 값들이 포함되어 있는 dictionary 예제에서 많이 사용하게 될 것 같습니다.

 

그리고 위 코드는 모두 반복문과 dictionary 의 keys() 함수와 같은 내장 함수들을 이용해서도 구현할 수 있는데요. 위 사용법의 주된 목적은 짧고 간결하게 해당 기능을 구현할 수 있도록 의도하고 있는 것 같습니다.

728x90
반응형
댓글