Python 사전의 목록에 추가
이 질문에 이미 답변이 있습니다.
- 루프 내 사전의 변수로 목록 초기화 2 답변
이 코드를 작성하는 더 우아한 방법이 있습니까?
내가하는 일 : 열쇠와 날짜가 있습니다. 키에 할당 된 여러 날짜가있을 수 있으므로이를 나타내는 날짜 목록 사전을 만듭니다. 다음 코드는 잘 작동하지만 더 우아하고 Pythonic 메서드를 원했습니다.
dates_dict = dict()
for key, date in cur:
if key in dates_dict:
dates_dict[key].append(date)
else:
dates_dict[key] = [date]
아래가 작동 할 것으로 예상했지만 NoneType에 속성 추가 오류가 계속 발생합니다.
dates_dict = dict()
for key, date in cur:
dates_dict[key] = dates_dict.get(key, []).append(date)
이것은 아마도
print([].append(1))
None
근데 왜?
list.append
반환 None
, 그것이 현재 위치에서 작동하고 다시에 할당되기 때문에 dates_dict[key]
. 따라서 다음에 할 때 dates_dict.get(key, []).append
실제로 None.append
. 그것이 실패하는 이유입니다. 대신 간단히 할 수 있습니다.
dates_dict.setdefault(key, []).append(date)
그러나 우리는 collections.defaultdict
이 목적을 위해서만 있습니다. 다음과 같이 할 수 있습니다.
from collections import defaultdict
dates_dict = defaultdict(list)
for key, date in cur:
dates_dict[key].append(date)
key
사전에없는 경우 새 목록 개체를 만듭니다 .
참고 :defaultdict
사전에서 키를 찾을 수없는 경우는 새 목록을 생성 하므로 의도하지 않은 부작용이 발생합니다. 예를 들어, 거기에없는 키 값을 단순히 검색하려는 경우 새 목록을 만들고 반환합니다.
이 코드를 작성하는 더 우아한 방법이 있습니까?
from collections import defaultdict
dates_dict = defaultdict(list)
for key, date in cur:
dates_dict[key].append(date)
dates_dict[key] = dates_dict.get(key, []).append(date)
설정 dates_dict[key]
에 None
로 list.append
돌아갑니다 None
.
In [5]: l = [1,2,3]
In [6]: var = l.append(3)
In [7]: print var
None
collections.defaultdict를 사용해야합니다.
import collections
dates_dict = collections.defaultdict(list)
참고 URL : https://stackoverflow.com/questions/26367812/appending-to-list-in-python-dictionary
'developer tip' 카테고리의 다른 글
Spring Boot를 사용하여 Dropbox 폴더에있는 정적 콘텐츠를 제공하려면 어떻게하나요? (0) | 2020.11.30 |
---|---|
WebApi에서 OAuth Bearer 토큰 생성 및 Owin을 사용하여 클라이언트에 더 많은 정보를 반환합니다. (0) | 2020.11.30 |
코드가없는 ASP.net 페이지 (0) | 2020.11.30 |
PDO를 사용하여 MySQL에서 숫자 유형을 얻는 방법은 무엇입니까? (0) | 2020.11.30 |
Picturebox에서 스크롤바를 얻는 방법 (0) | 2020.11.30 |