[python] 파이썬은 키를 생성하거나 키에 요소를 추가하는 방법을 지시합니까?

빈 사전이 있습니다. 이름 : dict_x
값이 목록 인 키가 있어야합니다.

별도의 반복에서 키 (예 🙂 key_123dict_x값 목록에 배치 할 항목 (튜플)을 얻습니다 key_123.

이 키가 이미 존재하면이 항목을 추가하고 싶습니다. 이 키가 존재하지 않으면 빈 목록으로 키를 만든 다음 추가하거나 튜플로 키를 만들고 싶습니다.

앞으로이 키가 다시 나타나면 키가 존재하기 때문에 값을 다시 추가하고 싶습니다.

내 코드는 다음과 같이 구성됩니다.

열쇠와 가치를 얻으십시오.

NOT 키가 있는지 확인하십시오 dict_x.

그리고 그것을 만들지 않으면 : dict_x[key] == []

나중에: dict_x[key].append(value)

이것이 방법입니까? try/except블록을 사용해 볼까요 ?



답변

사용 dict.setdefault():

dic.setdefault(key,[]).append(value)

help (dict.setdefault) :

    setdefault(...)
        D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D


답변

이를 수행하는 다양한 방법이 있으므로 모양을 비교하고 원하는 것을 선택할 수 있습니다. 나는 내가 가장 “피 토닉” 이라고 생각하는 방식으로 그것들을 주문했고 , 언뜻보기에는 분명하지 않은 장단점을 언급했다.

사용 collections.defaultdict:

import collections
dict_x = collections.defaultdict(list)

...

dict_x[key].append(value)

장점 : 아마도 최상의 성능입니다. 단점 : Python 2.4.x에서는 사용할 수 없습니다.

사용 dict().setdefault():

dict_x = {}

...

dict_x.setdefault(key, []).append(value)

단점 : 미사용 list()s의 비효율적 인 생성 .

사용 try ... except:

dict_x = {}

...

try:
    values = dict_x[key]
except KeyError:
    values = dict_x[key] = []
values.append(value)

또는:

try:
    dict_x[key].append(value)
except KeyError:
    dict_x[key] = [value]


답변

이를 위해 defaultdict 를 사용할 수 있습니다 .

from collections import defaultdict
d = defaultdict(list)
d['key'].append('mykey')

사용 setdefault하지 않는 새 목록을 만들지 않기 때문에이 방법보다 약간 더 효율적 입니다. setdefault항목이 이미 사전에 존재하더라도 모든 호출 은 새 목록을 작성합니다.


답변

에서 defaultdict 를 사용할 수 있습니다 collections.

doc의 예 :

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
    d[k].append(v)


답변

dictionary['key'] = dictionary.get('key', []) + list_to_append


답변