Orijinal cevabım bu noktayı kaçırmış olsa da (bu sorunu defaultdict fabrikasındaki Access anahtarına çözüm ile çözmeye çalışarak ), mevcut soruya gerçek bir çözüm önermek için yeniden çalıştım.
İşte burada:
class walkableDict(dict):
def walk(self, callback):
try:
for key in self:
self[key] = callback(self[key])
except TypeError:
return False
return True
Kullanımı:
>>> d = walkableDict({ k1: v1, k2: v2 ... })
>>> d.walk(f)
Fikir, orijinal diksele istenen işlevselliği vermek için alt sınıfı sınıflandırmaktır: bir işlevi tüm değerler üzerinde "eşleme".
Artı nokta, bu sözlüğün orijinal verileri olduğu gibi depolamak için kullanılabilirken dict, talep üzerine herhangi bir veriyi geri arama ile dönüştürmek için kullanılabilir.
Tabii ki, sınıfı ve işlevi istediğiniz gibi adlandırmaktan çekinmeyin (bu cevapta seçilen ad PHP'nin array_walk()işlevinden esinlenmiştir ).
Not: Ne try- exceptbloğu ne de returnifadeler işlevsellik için zorunlu değildir, PHP'lerin davranışlarını daha fazla taklit etmek için oradadırlar array_walk.
dict((k, f(v)) for k, v in mydict.iteritems()), yani köşeli parantezler olmadan, bir jeneratör aracılığıyla bir ara liste oluşturulmasını engelleyecektir.