code

Python 사전에 목록 추가

starcafe 2023. 4. 13. 20:59
반응형

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사전에서 키를 찾을 수 없는 경우 새 목록이 생성됩니다. 이 경우 의도하지 않은 부작용이 발생합니다.예를 들어 존재하지 않는 키의 값을 단순히 취득하는 경우 새 목록이 생성되어 반환됩니다.

이 코드를 좀 더 우아하게 쓸 수 있는 방법이 있을까요?

collections.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

반응형