python gestapelte dict (denk sehr hohe python kenntnisse notig)?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
topic = '/nou/0'
a,b=topic.split('/')[1:3] # oder [-2:]
data[a][b]

So soltle sich das machen lassen.


ware37 
Fragesteller
 31.12.2023, 02:22

Ich hab vergessen zu erwahnen das topic dynamisch ist.
Also kann topic auch als bsp:

topic = '/nou'
topic = '/nou/0/Drei'
0
KarlRanseierIII  31.12.2023, 03:04
@ware37
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.

0
ware37 
Fragesteller
 31.12.2023, 16:21
@KarlRanseierIII

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)

0
KarlRanseierIII  31.12.2023, 17:34
@ware37

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.

0
ware37 
Fragesteller
 01.01.2024, 13:04
@KarlRanseierIII
  1. Ja.
  2. 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

0

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