source

Python에서 목록의 키와 빈 값을 사용하여 dict를 초기화하려면 어떻게 해야 합니까?

lovecheck 2022. 10. 20. 21:59
반응형

Python에서 목록의 키와 빈 값을 사용하여 dict를 초기화하려면 어떻게 해야 합니까?

이것으로부터 얻고 싶다.

keys = [1,2,3]

다음과 같이 입력합니다.

{1: None, 2: None, 3: None}

그것을 하는 비토닉적인 방법이 있나요?

이것은 추악한 방법입니다.

>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}

dict.fromkeys 는 문제를 직접 해결합니다.

>>> dict.fromkeys([1, 2, 3, 4])
{1: None, 2: None, 3: None, 4: None}

이것은 실제로 클래스 메서드이기 때문에 dict-subclasses에서 동작합니다(예:collections.defaultdict)도 마찬가지입니다.

옵션의 두 번째 인수(기본값)None는 키에 사용할 값을 지정합니다.각 키에 대해 동일한 객체가 사용되므로 변동 가능한 값에 문제가 발생할 수 있습니다.

>>> x = dict.fromkeys([1, 2, 3, 4], [])
>>> x[1].append('test')
>>> x
{1: ['test'], 2: ['test'], 3: ['test'], 4: ['test']}

딕트 이해 사용:

>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}

값 표현은 매번 평가되므로 개별 목록(say)을 값으로 사용하여 dict를 작성할 수 있습니다.

>>> x = {key: [] for key in [1, 2, 3, 4]}
>>> x[1] = 'test'
>>> x
{1: 'test', 2: [], 3: [], 4: []}
dict.fromkeys(keys, None)

목록 이해 기능을 사용하여 키와 값의 쌍 목록을 작성할 수 있으며, 키와 값의 쌍은 다음 에 전달될 수 있습니다.dict컨스트럭터다음과 같이 됩니다.

>>> keys = {"a", "b", "c", "d"}
>>> d = dict([(key, []) for key in keys])
>>> d
{'d': [], 'c': [], 'a': [], 'b': []}

값 표현은 매번 평가되며 위의 예에서 개별 목록을 만듭니다.

>>> d['a'].append('test')
>>> d
{'d': [], 'c': [], 'a': ['test'], 'b': []}

빈 사전에 값을 추가하고 반복하기만 하면 됩니다.

d = {}
for i in keys:
    d[i] = None

임의의 키에 기본값/초기값을 부가하는 워크플로우에서는 미리 각 키를 개별적으로 해시할 필요가 없습니다.를 사용할 수 있습니다.예를 들어 다음과 같습니다.

from collections import defaultdict

d = defaultdict(lambda: None)

print(d[1])  # None
print(d[2])  # None
print(d[3])  # None

이렇게 하면 인스턴스화 시 모든 키를 해시할 필요가 없어집니다.게다가.defaultdict의 하위 클래스입니다.dict따라서 보통 다시 일반 사전으로 변환할 필요가 없습니다.

허용 키에 대한 제어가 필요한 워크플로우의 경우 승인된 답변에 따라 다음을 사용할 수 있습니다.

d = dict.fromkeys([1, 2, 3, 4])

컨스트럭터가 와 잘 동작하는 것이 재미있다고 해서 디폴트값과zip키를 누릅니다.

from itertools import repeat

keys = [1, 2, 3]
default_value = None

d = dict(zip(keys, repeat(default_value)))
print(d)

제공 내용:

{1: None, 2: None, 3: None}

repeat전달된 요소의 무한 반복자를 만들지만zip가장 짧은 반복으로 멈추면 모든 것이 잘 작동합니다.

언급URL : https://stackoverflow.com/questions/2241891/how-to-initialize-a-dict-with-keys-from-a-list-and-empty-value-in-python

반응형