programing

Python은 키 표시가 없는 경우 키 표시를 업데이트합니다.

muds 2023. 6. 10. 09:50
반응형

Python은 키 표시가 없는 경우 키 표시를 업데이트합니다.

키가 dict.keys()에 없으면 키-값 쌍을 dict에 삽입합니다.기본적으로 다음과 같은 기능을 사용할 수 있습니다.

if key not in d.keys():
    d[key] = value

하지만 더 좋은 방법이 있을까요?아니면 이 문제에 대한 비단결 같은 해결책은 무엇일까요?

전화할 필요가 없습니다.d.keys(),그렇게

if key not in d:
    d[key] = value

충분합니다.더 명확하고 읽기 쉬운 방법은 없습니다.

다음을 사용하여 다시 업데이트할 수 있습니다.dict.get()키가 이미 있는 경우 기존 값을 반환합니다.

d[key] = d.get(key, value)

그러나 이는 코드 골프로 유지보수와 가독성을 저해하는 것입니다.

사용:

>>> d = {'key1': 'one'}
>>> d.setdefault('key1', 'some-unused-value')
'one'
>>> d    # d has not changed because the key already existed
{'key1': 'one'}
>>> d.setdefault('key2', 'two')
'two'
>>> d
{'key1': 'one', 'key2': 'two'}

Python 3.9부터는 병합 연산자를 사용할 수 있습니다. |두 개의 사전을 병합합니다.오른쪽의 딕트가 우선합니다.

new_dict = old_dict | { key: val }

예:

new_dict = { 'a': 1, 'b': 2 } | { 'b': 42 }

print(new_dict) # {'a': 1, 'b': 42}

참고: 업데이트된 값으로 새 사전을 만듭니다.

다음을 사용하여 여러 개의 값을 삽입하고 기본값을 사용할 수 있지만 새 사전을 만듭니다.

d = {**{ key: value }, **default_values}

가장 많은 표를 얻은 답변으로 테스트해 보았는데 평균적으로 다음 예제에서 볼 수 있듯이 이 방법이 더 빠릅니다.

for 루프 기반 방법과 언팩 연산자를 사용한 딕트 이해를 비교하는 속도 테스트 for 루프 기반 방법과 압축 풀기 연산자 방법을 비교하는 속도 테스트.

사본이 없는 경우(d = default_vals.copy())는 첫 번째 사례에서 만들어지며, 가장 많이 투표된 답변은 규모의 순서에 도달하면 더 빠를 것입니다.10**5그 이상.두 방법의 메모리 설치 공간은 동일합니다.

이 솔루션은 코드 한 줄에서만 사용할 수 있습니다.

dict[dict_key] = dict.get(dict_key,value)

의 두 번째 주장dict.get키가 존재하지 않는 경우 키에 할당할 값입니다.이것은 할당 전에 평가되기 때문에dict[dict_key] = 우리가 그것에 접근하려고 할 때 그들의 키가 존재할 것이라는 것을 확신할 수 있습니다.

언급URL : https://stackoverflow.com/questions/42315072/python-update-a-key-in-dict-if-it-doesnt-exist

반응형