python gestapelte dict (denk sehr hohe python kenntnisse notig)?
topic = '/nou/0'
dic:
data = {"nou": {"0": {"Drei": {"dfd": ["fe"]}}}}
Wie bekomm ich es hin, dass ich durch topic, auf den dict data zugreife (wenn moglich mit 1-2 zeile(n))
Edit:
topic ist dynamisch also topic kann sich von der grose andern
aslo topic kann auch bsp:
topic = '/nou/
topic = '/nou//0/Drei'
...
2 Antworten
topic = '/nou/0'
a,b=topic.split('/')[1:3] # oder [-2:]
data[a][b]
So soltle sich das machen lassen.
needle=data
for k in topic.split('/')[1:]:
needle=needle.get(v,None)
print(needle)
Ich würde allerdings überlegen, wenn ich solche Suchpfade in einer Struktur habe, die Struktur mit eigenen Typen zu bauen.
Oder halt sowas:
needle=data
partials=[ needle:=needle.get(v,None) for v in topic.split('/')[1:] ]
Ich hab aus dem code von @KarlRanseierlll und @VanLorry das gbeaut:
# output: {'19:51 29-12-2023': {'0': {'Drei': {'infinitiv': ['three']}}}, 'nauns': {'besteck': {'k': {}}}}
data = {"19:51 29-12-2023": {"0": {"Drei": {"infinitiv": ["three"]}}}}
topic = '/nauns/besteck/k'
x = len(topic.lstrip('/').split("/"))
i = 0
d = data
topic = topic.lstrip('/').split("/")
while i+1 <= x:
try:
d = d[topic[i]]
i += 1
except KeyError:
d[topic[i]] = {}
print('Finitely:', data)
Kann man den Code auch kurzen.
Ich farg weil ich hab euch beide ein Operator und ein kozept gefunden hab:D
(Vielleicht kenn ich ja noch was dazu lern:D)
Liest Du eigentlich die Kommentare und Beispiele?
Hier mit Fehlerbehandlung:
needle=data
for k in topic.split('/')[1:]:
if needle: needle=needle.get(k,False)
else: break
Die Nutzung von get() hat essentielle Vorteile. Alternativ könnte man auch ein if mit key in dict machen, um sich das try/except zu sparen.
Oder eben:
>>> needle=data
>>> partials=[ needle:=needle.get(v,False) for v in topic.split('/')[1:] if needle]
>>> partials
[False]
>>> needle
False
Hier wird die Comprehension halt nicht vorzeitig abgebrochen.
- Ja.
- Eig prufe ich zuerst ob es vorhanden ist wenn nicht dann, wird topic angehangen.Mein Code hangt topic an.
# input ./main add /nauns/besteck/ -a Infinitiv k Drei three
# output > Json: {"nauns": { "besteck": {"19:51 29-12-2023": {"0": {"Drei": {"infinitiv": ["three"]}}}}}}
Ich wusste nicht wie ich was die exsetens in einem gestapelten dict uberprufe und wenn hinzufuge ....
Ich mach quasi ein Vokable abfrager
data[„nou“][„0“] ist das ergebniss, denk ich?!
Aber ich brauch code der :'/nou/0'
zu: data[„nou“][„0“]
convertiert und das in ein bis 2 zeilen
Ich hab vergessen zu erwahnen das topic dynamisch ist.
Also kann topic auch als bsp: