본문 바로가기
Python/Python FAQ

Python 파이썬 사전 내포 [중복], Python Dictionary Comprehension [duplicate]

by 베타코드 2023. 10. 13.
반응형

질문


파이썬에서 딕셔너리 내포(dictionary comprehension)를 만들 수 있을까요?

리스트 내포 없이는 다음과 같이 사용할 수 있습니다:

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 # 모든 키에 동일한 값 설정

다음을 시도해 보았습니다:

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가 발생합니다.


답변


파이썬 2.7+에서는 dictionary comprehensions이 있지만, 시도하고 있는 방식과는 조금 다릅니다. 리스트 컴프리헨션과 마찬가지로 새로운 사전을 생성합니다. 기존의 사전에 키를 추가하기 위해서는 사용할 수 없습니다. 또한, 키와 값을 명시적으로 지정해야 합니다. 물론 필요하다면 더미 값으로 지정할 수 있습니다.

>>> 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}

보여주신 것처럼 기존 사전에 한 번에 여러 키를 설정하는 방법을 요청하고 있는 것 같습니다. 직접적인 바로 가기는 없습니다. 이미 보여주신 것처럼 루프를 사용하거나, 새로운 값을 가진 새로운 사전을 생성하기 위해 사전 컴프리헨션을 사용한 다음, oldDict.update(newDict)를 사용하여 새로운 값을 기존 사전에 병합할 수 있습니다.

반응형

댓글