Python 사전에 목록 추가
이 코드를 좀 더 우아하게 쓸 수 있는 방법이 있을까요?
하고 있는 일:열쇠와 날짜가 있어요키에는 여러 날짜가 할당되어 있을 수 있기 때문에 이를 나타내는 날짜 목록을 사전으로 만들고 있습니다.아래 코드는 잘 작동하지만, 저는 좀 더 우아하고 피토닉한 방법을 원했습니다.
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)
하지만, 우리는 오직 이 목적만을 위해 있습니다.이런 거 할 수 있어요.
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
'code' 카테고리의 다른 글
Swift의 iOS 경고에서 TextField에서 입력 값 가져오기 (0) | 2023.04.13 |
---|---|
클래스 메서드와 인스턴스 메서드의 차이점은 무엇입니까? (0) | 2023.04.13 |
Git의 특정 리비전에서 단일 파일을 가져오려면 어떻게 해야 합니까? (0) | 2023.04.13 |
글로벌을 사용하지 않고 bash로 어레이를 반환하려면 어떻게 해야 합니까? (0) | 2023.04.13 |
VBA를 사용하여 지정된 셀 위치에서 Excel에 사진을 삽입하는 방법 (0) | 2023.04.13 |