Supponiamo Ho due dicts in Python:C'è un modo per impostare più valori predefiniti su un dict Python usando un altro dict?
mydict = { 'a': 0 }
defaults = {
'a': 5,
'b': 10,
'c': 15
}
Voglio essere in grado di espandere mydict
utilizzando i valori di default da defaults
, in modo tale che 'a' rimane la stessa, ma 'b' e 'c' sono compilati. So di dict.setdefault()
e di dict.update()
, ma ognuno di essi fa solo la metà di quello che voglio: con dict.setdefault()
, devo eseguire il loop su ciascuna variabile in defaults
; ma con dict.update()
, defaults
eliminerà i valori preesistenti in mydict
.
C'è qualche funzionalità che non trovo integrata in Python che possa fare questo? E se no, c'è un modo più Pythonic di scrivere un ciclo per chiamare ripetutamente dict.setdefaults()
di questo:
for key in defaults.keys():
mydict.setdefault(key, defaults[key])
Contesto: Sto scrivendo alcuni dati in Python che controlla come analizzare un albero XML. C'è un dict per ogni nodo (ad esempio, come elaborare ciascun nodo), e preferisco che i dati che scrivo siano sparsi, ma riempiti con valori predefiniti. Il codice di esempio è solo un esempio ... il codice reale ha molte più coppie chiave/valore nella dict predefinita.
(mi rendo conto tutta questa domanda è, ma una sottigliezza, ma sono io tormenta, quindi mi chiedevo se ci fosse un modo migliore per fare questo che io non sono a conoscenza.)
Sì, questo è quello che faccio anche io di solito .. – Macke
Ho pensato a questo, ma non copiare le impostazioni predefinite è piuttosto inefficiente (specialmente mydict ha tutti i valori impostati per cominciare)? Dovresti creare un nuovo dettato, copiare tutti i valori di un altro, quindi riscrivere l'intero dettato in quel caso. –
@Daniel Lew: i valori non verranno copiati, solo riferimenti a loro. Il nuovo dict avrà nuovi riferimenti agli stessi valori in memoria. – nosklo