source

dict를 초기화하기 위해 권장되는 구문은 무엇입니까(컬리 괄호 리터럴 {} 또는 dict() 함수).

itover 2022. 11. 21. 22:19
반응형

dict를 초기화하기 위해 권장되는 구문은 무엇입니까(컬리 괄호 리터럴 {} 또는 dict() 함수).

Python을 배우기 위해 노력하고 있으며, 일반적인 코딩 기준에 주의를 기울이고 있습니다.이것은 별 의미 없는 따분한 질문처럼 보일지도 모르지만, 저는 배울수록 베스트 프랙티스에 초점을 맞추려고 노력하고 있습니다.그래서 나중에 나쁜 습관을 들일 필요가 없습니다.

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)

다음과 같은 오류가 발생합니다.

    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
    
  • 사전 리터럴의 특별한 구문이 사용되지 않았다면 존재하지 않았을 것입니다.

저는 거의 항상 곱슬머리 괄호를 사용합니다.단, 테스트를 작성할 때는 키워드 패킹/언패킹을 수행합니다.이 경우 dict()는 변경할 필요가 없기 때문에 유지보수가 훨씬 용이합니다.

a=1,
b=2,

대상:

'a': 1,
'b': 2,

또한 나중에 명명된 튜플 또는 클래스 인스턴스로 변환하고 싶은 상황도 있습니다.

구현 자체에서는 최적화에 대한 집착이 강하기 때문에 특별히 유지보수가 용이하지 않을 때는 항상 곱슬브레이스를 선호합니다.

테스트 및 구현에서 dict()는 그때 또는 미래에 추가된 키가 다음 중 하나가 될 가능성이 있을 때 사용하지 않습니다.

  • 항상 문자열이 되는 것은 아니다.
  • 숫자, ASCII 문자 및 밑줄만 포함할 수 없습니다.
  • 정수로 시작합니다(dict(1foo=2)SyntaxError가 발생합니다).

나는 첫 번째 옵션이 a['a'] 또는 a['other']로 값에 접근할 것이기 때문에 더 낫다고 생각한다.사전의 키는 문자열입니다.열쇠가 아닌 척 할 필요가 없습니다.키워드 구문은 처음에는 영리해 보이지만, 다시 보면 모호하다.이 방법은 고객님이 고객님과 함께 작업하고__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)]))

언급URL : https://stackoverflow.com/questions/2853683/what-is-the-preferred-syntax-for-initializing-a-dict-curly-brace-literals-or

반응형