프로그래밍 언어/Python

파이썬 딕셔너리 컴프리헨션

Rateye 2021. 10. 6. 10:54
728x90
반응형
질문 : 파이썬 사전 이해

파이썬에서 (키에 대해) 딕셔너리 컴프리헨션을 만들 수 있습니까?

딕셔너리 컴프리헨션 없이 다음과 같이 사용할 수 있습니다.

l = []
for n in range(1, 11):
    l.append(n)

이것을 리스트 컴프리헨션으로 줄일 수 있습니다 : l = [n for n in range(1, 11)] .

그러나 사전의 키를 동일한 값으로 설정하고 싶다고 가정 해보십시오. 내가 할 수있는:

d = {}
for n in range(1, 11):
     d[n] = True # same value for each

나는 이것을 시도했다 :

d = {}
d[i for i in range(1, 11)] = True

그러나 for SyntaxError 가 발생합니다.

또한 (이 부분은 필요하지 않지만 궁금한 점이 있습니다) 사전의 키를 다음과 같이 여러 가지 값으로 설정할 수 있습니까?

d = {}
for n in range(1, 11):
    d[n] = n

딕셔너리 컴프리헨션으로 가능합니까?

d = {}
d[i for i in range(1, 11)] = [x for x in range(1, 11)]

이것은 또한 for SyntaxError 를 발생시킵니다.

답변

Python 2.7+에는 딕셔너리 컴프리헨션이 있지만 시도하는 방식으로 작동하지 않습니다. 리스트 컴프리헨션와 마찬가지로 그들은 새로운 사전을 만듭니다. 기존 사전에 키를 추가하는 데 사용할 수 없습니다. 또한 원하는 경우 더미 값을 지정할 수 있지만 키와 값을 지정해야합니다.

>>> d = {n: n**2 for n in range(5)}
>>> print d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

모두 True로 설정하려면 다음을 수행하십시오.

>>> d = {n: True for n in range(5)}
>>> print d
{0: True, 1: True, 2: True, 3: True, 4: True}

당신이 요구하는 것은 기존 사전에 한 번에 여러 키를 설정하는 방법입니다. 그것에 대한 직접적인 지름길은 없습니다. 이미 보여준 것처럼 반복하거나 딕셔너리 컴프리헨션를 사용하여 새 값으로 새 dict를 만든 다음 oldDict.update(newDict) 를 수행하여 새 값을 이전 dict에 병합 할 수 있습니다.

출처 : https://stackoverflow.com/questions/14507591/python-dictionary-comprehension
728x90
반응형