developer tip

사전 이해에서 if / else를 사용하는 방법?

optionbox 2020. 8. 19. 07:58
반응형

사전 이해에서 if / else를 사용하는 방법?


python2.7 +에는 다음과 같은 것을 만드는 방법이 있습니다.

{ something_if_true if condition else something_if_false for key, value in dict_.items() }

'만약'으로 무엇이든 만들 수 있다는 걸 알아

{ something_if_true for key, value in dict_.items() if condition}

이미 가지고 있습니다 : A if test else B유효한 파이썬 표현식입니다. dict comprehension의 유일한 문제는 dict comprehension에서 표현식의 위치에 콜론으로 구분 된 두 개의 표현식이 있어야한다는 것입니다.

{ (some_key if condition else default_key):(something_if_true if condition 
          else something_if_false) for key, value in dict_.items() }

마지막 if절은 조건식과는 다른 필터 역할을합니다.


@Marcin의 답변 은 모든 것을 다루지 만 누군가가 실제 예제를보고 싶다면 아래에 두 가지를 추가합니다.

다음과 같은 세트 사전이 있다고 가정 해 보겠습니다.

d = {'key1': {'a', 'b', 'c'}, 'key2': {'foo', 'bar'}, 'key3': {'so', 'sad'}}

문자열 'a'이 값에 포함되어 있는지 여부를 나타내는 키가있는 새 사전을 만들려면 다음을 사용할 수 있습니다.

dout = {"a_in_values_of_{}".format(k) if 'a' in v else "a_not_in_values_of_{}".format(k): v for k, v in d.items()}

어느 양보

{'a_in_values_of_key1': {'a', 'b', 'c'},
 'a_not_in_values_of_key2': {'bar', 'foo'},
 'a_not_in_values_of_key3': {'sad', 'so'}}

이제 다음과 같은 두 개의 사전이 있다고 가정 해 보겠습니다.

d1 = {'bad_key1': {'a', 'b', 'c'}, 'bad_key2': {'foo', 'bar'}, 'bad_key3': {'so', 'sad'}}
d2 = {'good_key1': {'foo', 'bar', 'xyz'}, 'good_key2': {'a', 'b', 'c'}}

각 값이 동일한 경우 d1키로 키를 교체하려면 d2다음을 수행 할 수 있습니다.

# here we assume that the values in d2 are unique
# Python 2
dout2 = {d2.keys()[d2.values().index(v1)] if v1 in d2.values() else k1: v1 for k1, v1 in d1.items()}

# Python 3
dout2 = {list(d2.keys())[list(d2.values()).index(v1)] if v1 in d2.values() else k1: v1 for k1, v1 in d1.items()}

주는

{'bad_key2': {'bar', 'foo'},
 'bad_key3': {'sad', 'so'},
 'good_key2': {'a', 'b', 'c'}}

참고 URL : https://stackoverflow.com/questions/9442724/how-to-use-if-else-in-a-dictionary-comprehension

반응형