2012-02-10 3 views
1

을받지 때 사용 기본값은이 나는 collections.defaultdict 수익 내가 그것을 설정할 때 객체를 구축 기본 만들 수있는 방법 ...파이썬`defaultdict` : 설정,하지만

foo = defaultdict(list) 
foo[3].append('dsafdasf') 

...하지만 내가 접근하려고 할 때?

try: 
    for word in foo[None]: 
     print(word) 
except KeyError: 
    pass 

답변

8

내가 당신을 위해 무엇을 찾고있는 것은 이런 일이라고 생각 및 누락 된 키에 대해 예외를 발생해야하는 경우 항목 액세스.

3

아니요. "설정"의 예는 실제로 사용하지 않는 슬롯을 얻는 예이기 때문에 아닙니다.

대신 collections.defaultdict을 사용하는 것입니다
>>> foo = {} 
>>> foo.setdefault(3, []).append('dsafdasf') # Appends to default value 
>>> foo[None] # Raises a KeyError exception 

, 정기적 사전을 사용하고 기본을 할당해야 할 때 setdefault 방법을 사용할 수 있습니다

+0

나는 파이썬이'__getitem__'과'__setitem__' 함수를 가지고 있기 때문에 가능하다고 생각했습니다. –

+3

@PaulManta 두 가지를 모두 가지고 있지만 여기서는'__getitem__' 만 사용하고 있습니다. 당신의 예제에서'foo [3]'와'foo [None]'은 모두 dict 엔트리에 접근하고 있습니다; 'foo [3] = ... '과 같은 것을하면'__setitem__'이 호출됩니다. – lvc

관련 문제