파이썬을 배우기 위해 노력하고 있으며 일반적인 코딩 표준에 세심한주의를 기울이고 있습니다. 이것은 무의미한 까다로운 질문처럼 보일 수 있지만, 배우면서 모범 사례에 초점을 맞추려고 노력하므로 ‘나쁜’습관을 배우지 않아도됩니다.
dict를 초기화하는 두 가지 일반적인 방법이 있습니다.
a = {
'a': 'value',
'another': 'value',
}
b = dict(
a='value',
another='value',
)
어느 것이 “파이 토닉”이라고 여겨지 는가? 어느 것을 사용하십니까? 왜?
답변
중괄호. 키워드 인수를로 전달 dict()
하면 많은 시나리오에서 훌륭하게 작동하지만 키가 유효한 Python 식별자 인 경우에만 맵을 초기화 할 수 있습니다.
이것은 작동합니다 :
a = {'import': 'trade', 1: 7.8}
a = dict({'import': 'trade', 1: 7.8})
작동하지 않습니다.
a = dict(import='trade', 1=7.8)
>> SyntaxError: invalid syntax ^
답변
첫 번째 중괄호. 그렇지 않으면, 이상한 문자가있는 키와 같은 일관성 문제가 발생합니다 =
.
# Works fine.
a = {
'a': 'value',
'b=c': 'value',
}
# Eeep! Breaks if trying to be consistent.
b = dict(
a='value',
b=c='value',
)
답변
첫 번째 버전이 바람직합니다 :
- 그것은 모든 종류의 키에서 작동하므로 예를 들어 말할 수
{1: 'one', 2: 'two'}
있습니다. 두 번째 변형은 (일부) 문자열 키에서만 작동합니다. 키 유형에 따라 다른 종류의 구문을 사용하는 것은 불필요한 불일치입니다. -
더 빠릅니다.
$ python -m timeit "dict(a='value', another='value')" 1000000 loops, best of 3: 0.79 usec per loop $ python -m timeit "{'a': 'value','another': 'value'}" 1000000 loops, best of 3: 0.305 usec per loop
- 사전 리터럴의 특수 구문을 사용하지 않았다면 존재하지 않았을 것입니다.
답변
첫 번째 옵션은 a [ ‘a’] 또는 a [ ‘another’]로 값에 액세스하기 때문에 더 좋습니다. 사전의 키는 문자열이며, 그렇지 않은 척할 이유가 없습니다. 나에게 키워드 구문은 처음에는 영리 해 보이지만 두 번째 모양에서는 모호합니다. 는으로 작업 __dict__
하고 키워드가 나중에 속성이 될 경우에만 의미 가 있습니다.
답변
참고로, 사전에 속성을 추가해야하는 경우 (사전에는 첨부되어 있지만 키 중 하나는 아님) 두 번째 양식이 필요합니다. 이 경우 한 번에 하나씩 임의의 문자를 갖는 키를 사용하여 사전을 초기화 할 수 있습니다.
class mydict(dict): pass
a = mydict()
a["b=c"] = 'value'
a.test = False
답변
때때로 dict()
좋은 선택입니다 :
a=dict(zip(['Mon','Tue','Wed','Thu','Fri'], [x for x in range(1, 6)]))
mydict=dict(zip(['mon','tue','wed','thu','fri','sat','sun'],
[random.randint (0,100) x 범위 (0,7) 범위)]))
답변
나는 거의 항상 중괄호를 사용합니다. 그러나 테스트를 작성하는 경우 키워드 패킹 / 언 패킹을 수행 하며이 경우 변경 할 필요가 없으므로 dict ()가 훨씬 유지 관리가 가능합니다.
a=1,
b=2,
에:
'a': 1,
'b': 2,
또한 나중에 명명 된 튜플 또는 클래스 인스턴스로 바꾸고 싶을 수도 있습니다.
구현 자체에서 최적화에 대한 집착 때문에 특히 유지 관리 이점이 크지 않을 때는 항상 중괄호를 선호합니다.
테스트와 구현에서 키를 추가하거나 나중에 추가 할 가능성이 있다면 dict ()를 사용하지 않습니다.
- 항상 문자열은 아닙니다
- 숫자, ASCII 문자 및 밑줄 만 포함 할 수 없습니다
- 정수로 시작합니다 (
dict(1foo=2)
SyntaxError 발생)