내 원래의 대답은 ( defaultdict 공장의 액세스 키에 대한 솔루션 으로이 문제를 해결하려고 노력하면서) 요점을 놓쳤지만 현재 질문에 대한 실제 솔루션을 제안하기 위해 재 작업했습니다.
여기있어:
class walkableDict(dict):
def walk(self, callback):
try:
for key in self:
self[key] = callback(self[key])
except TypeError:
return False
return True
용법:
>>> d = walkableDict({ k1: v1, k2: v2 ... })
>>> d.walk(f)
아이디어는 원하는 기능을 제공하기 위해 원래 dict을 서브 클래 싱하는 것입니다. 모든 값에 대해 함수를 "매핑"합니다.
장점은이 사전을 사용하여 원본 데이터를 마치 마치 dict
콜백으로 요청시 데이터를 변환 하는 것처럼 원래 데이터를 저장하는 데 사용할 수 있다는 것 입니다.
물론 클래스와 함수의 이름을 원하는대로 자유롭게 지정할 수 있습니다 (이 답변에서 선택한 이름은 PHP의 array_walk()
함수에서 영감을 얻었습니다 ).
참고 : 둘 다 try
- except
블록이나 return
문이 기능을위한 필수, 그들은 PHP의 더 모방 행동에있다 array_walk
.
dict((k, f(v)) for k, v in mydict.iteritems())
즉, 대괄호없이 생성기를 통해 중간 목록을 생성하지 못하게하는 것입니다.