developer tip

Python 사전의 목록에 추가

copycodes 2020. 11. 30. 17:57
반응형

Python 사전의 목록에 추가


이 질문에 이미 답변이 있습니다.

이 코드를 작성하는 더 우아한 방법이 있습니까?

내가하는 일 : 열쇠와 날짜가 있습니다. 키에 할당 된 여러 날짜가있을 수 있으므로이를 나타내는 날짜 목록 사전을 만듭니다. 다음 코드는 잘 작동하지만 더 우아하고 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 사전에서 키를 찾을 수없는 경우는 새 목록을 생성 하므로 의도하지 않은 부작용이 발생합니다. 예를 들어, 거기에없는 키 값을 단순히 검색하려는 경우 새 목록을 만들고 반환합니다.


이 코드를 작성하는 더 우아한 방법이 있습니까?

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]Nonelist.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

반응형