Ich habe die Dokumentation durchforstet und die Hilfe vieler Teammitglieder benutzt, bin aber nicht in der Lage herauszufinden, wie man ein Wörterbuch durch Werte ersetzt, die als Kwargs (in meinem Fall) zur Verfügung gestellt werden Testfunktion:Python 3 benutze kwargs, um geschachtelte Wörterbuchwerte zu ersetzen
Template-Wörterbuch:
{
"id": "id_1234",
"integer_value": 1234,
"level_one": {
"id": 1234,
"foo": "true",
"list_one": [],
"list_two": [
522
],
"url": "http://google.com",
"level_two": {
"thing_one": {
"yes": "false",
"no": "false"
},
"thing_two": {
"yes": "false",
"no": "false"
}
},
"another_field": "true",
"bar": 15000
}
}
rekursive Wörterbuch-Funktion:
def update_dictionary(template_dict, **kwargs):
for k, v in kwargs.items():
print(v)
print(isinstance(v, collections.Mapping))
if isinstance(v, collections.Mapping):
print("This is the k value")
print(k)
template_dict[k] = update_dictionary(template_dict.get(k, {}), v)
else:
print("We're going into the else now")
template_dict[k] = v
return template_dict
ich habe die obige Funktion aus einem anderen Forum hier, aber es funktioniert scheint nicht zu funktionieren, wenn man Kwargs passiert. Für alle Felder, die sich nicht in der ersten Ebene des verschachtelten Wörterbuchs befinden, erweist sich die Instanzprüfung von instance als False. Jede Hilfe wird geschätzt!
Linie in Test, bei dem der kwargs übergeben werden:
new_dict = update_dictionary(template_dict, another_field = 'false', integer_value=12345)
Keys wird nie eine Instanz von 'collections.Mapping', zumindest nicht, bis Sie eine hashable Mapping implementieren. Du meinst wahrscheinlich 'isinstance (v, collections.Mapping)' –
Ah, ja, das war ein Tippfehler für mich. (v, collections.Mapping) gibt in diesem Fall auch False für alle verschachtelten Wörterbuchschlüssel zurück. – cityofbombaylylove
Außerdem müssen Sie die 'Kwargs' weiterreichen .... –