빈 사전이 있습니다. 이름 : dict_x
값이 목록 인 키가 있어야합니다.
별도의 반복에서 키 (예 🙂 key_123
와 dict_x
값 목록에 배치 할 항목 (튜플)을 얻습니다 key_123
.
이 키가 이미 존재하면이 항목을 추가하고 싶습니다. 이 키가 존재하지 않으면 빈 목록으로 키를 만든 다음 추가하거나 튜플로 키를 만들고 싶습니다.
앞으로이 키가 다시 나타나면 키가 존재하기 때문에 값을 다시 추가하고 싶습니다.
내 코드는 다음과 같이 구성됩니다.
열쇠와 가치를 얻으십시오.
에 NOT 키가 있는지 확인하십시오
dict_x
.그리고 그것을 만들지 않으면 :
dict_x[key] == []
나중에:
dict_x[key].append(value)
이것이 방법입니까? try/except
블록을 사용해 볼까요 ?
답변
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