Mam duży dyktando Pythona utworzone z danych json i tworzę mniejszy dict z dużego. Niektóre elementy dużego słownika mają klucz o nazwie "szczegóły", a niektóre elementy nie. Co chcę zrobić, to sprawdzić, czy klucz istnieje w każdym wpisie w dużym słowniku, a jeśli nie, dopisać klucz "szczegóły" z wartością "Brak dostępnych informacji" do nowego słownika. Zamieszczam przykładowy kod poniżej, jako demonstrację. LargeDict jest znacznie większy z wieloma kluczami w moim kodzie, ale utrzymuję to dla jasności.Sprawdź, czy klucz istnieje w słowniku. Jeśli nie, dołącz to
LargeDict = {'results':
[{'name':'john','age':'23','datestart':'12/07/08','department':'Finance','details':'Good Employee'},
{'name':'barry','age':'26','datestart':'25/08/10','department':'HR','details':'Also does payroll'},
{'name':'sarah','age':'32','datestart':'13/05/05','department':'Sales','details':'Due for promotion'},
{'name':'lisa','age':'21','datestart':'02/05/12','department':'Finance'}]}
ten sposób otrzymuję dane dla SmallDict:
SmallDict = {d['name']:{'department':d['department'],'details':d['details']} for d in LargeDict['results']}
uzyskać kluczową błąd jednak, gdy jeden z dużych wpisów DICT ma żadnych szczegółów. Czy mam rację mówiąc, że muszę korzystać z modułu DefaultDict
, czy jest łatwiejszy sposób?
+1 (Od docs) dict.setdefault(): „Jeśli klucz jest w słowniku, zwraca jego wartość Jeśli nie, włóż klucz o wartości domyślnie i powrotu. domyślne, domyślne to Brak. " – heltonbiker
Tak. Użyj tego. defaultdict to złe stworzenie dla nieostrożnych. – javadba
FWIW, myślę, że "defaultdict" jest świetny. Głównie, nie sądzę, że warto przekonwertować zwykły 'dict' na' defaultdict', jeśli dostałeś go z innego źródła. "Zło" z 'defaultdict' może być ominięte po prostu przez ustawienie atrybutu' default_factory' na 'None' (co sprawi, że będzie się zachowywał jak zwykły dyktat po raz kolejny). – mgilson