Mapping Algorithmus optimieren
Verfasst: Mittwoch 7. Juli 2021, 09:00
Hallo zusammen,
ich habe folgenden Code in einer etwas unschönen Struktur und frage mich ob man dieses Problem auch eleganter lösen kann:
Da ich den realen Code nicht posten kann, habe ich ein Beispiel konstruiert:
Der reale Code ist Teil einer Instanz-Methode, was aber für das Problem kaum eine Rolle spielt, denke ich.
Der Sinn der ganze Sache ist 'dictionary_data' in eine Gruppierungsstruktur zu mappen.
Ausgabe:
Besonders die fast identischen try - except Blöcke stören mich.
Ich hatte überlegt diesen Teil in ein Methode auszulagern, bin mir aber nicht sicher ob das wirklich die beste Lösung ist.
Hat jemand Vorschläge?
ich habe folgenden Code in einer etwas unschönen Struktur und frage mich ob man dieses Problem auch eleganter lösen kann:
Da ich den realen Code nicht posten kann, habe ich ein Beispiel konstruiert:
Der reale Code ist Teil einer Instanz-Methode, was aber für das Problem kaum eine Rolle spielt, denke ich.
Der Sinn der ganze Sache ist 'dictionary_data' in eine Gruppierungsstruktur zu mappen.
Code: Alles auswählen
class SomeClass:
def __init__(self):
self.dictionary_data = {"A": 1, "B": 2, "C": 3, "F": 6} # Nur als Beispiel, wird sonst aus anderer Quelle bereitgestellt.
def do_the_mapping(self, mapping_data):
items = {}
for key, value in mapping_data.items():
if isinstance(value, dict):
item_group = {}
for nested_key, nested_value in value.items():
try:
item_group[nested_key] = self.dictionary_data[nested_value]
except KeyError:
print(f"Missing Element {nested_key}: {nested_value}")
else:
# Sinnlose Aktion nur um zu zeigen, dass hier noch etwas mit den Werten passieren soll
item_group[nested_key] += 1
item_group[nested_key] -= 1
items[key] = item_group
else:
try:
items[key] = self.dictionary_data[value]
except KeyError:
print(f"Missing Element {key}: {value}")
else:
# Sinnlose Aktion nur um zu zeigen, dass hier noch etwas mit den Werten passieren soll
items[key] += 1
items[key] -= 1
return items
if __name__ == "__main__":
mapping_data = {
"Group1": {
"AItem": "A",
"BItem": "B"
},
"DItem": "D",
"EItem": "E",
"CItem": "C"
}
some_instance = SomeClass()
items = some_instance.do_the_mapping(mapping_data)
print(items)
Code: Alles auswählen
Missing Element DItem: D
Missing Element EItem: E
{'Group1': {'AItem': 1, 'BItem': 2}, 'CItem': 3}
Ich hatte überlegt diesen Teil in ein Methode auszulagern, bin mir aber nicht sicher ob das wirklich die beste Lösung ist.
Hat jemand Vorschläge?