/ / python defaultdict Wie kann ich überprüfen, ob ein verschachtelter Schlüssel existiert oder [] ist, ohne den Schlüssel zu erstellen? Python, Wörterbuch, Datenstrukturen, defaultdict

python defaultdict Wie kann ich überprüfen, ob ein verschachtelter Schlüssel existiert oder [] ist, ohne den Schlüssel zu erstellen - Python, Wörterbuch, Datenstrukturen, defaultdict

Es gibt 3 Arten von Einträgen in einem verschachtelten Standarddict a der Struktur a=defaultdict(lambda: defaultdict(list)).

for i in a:
print a[i]

defaultdict(<type "list">, {"ldap_uidnumber": [["10002"]], "file": ["ABC", "xyz"]})
defaultdict(<type "list">, {"ldap_uidnumber": [], "file": ["abcd"]})
defaultdict(<type "list">, {"file": ["/home/testuser/.ssh/id_rsa.pub"]})
  1. Wie filtere ich den zweiten heraus, mit ldap_uidnumber: []?
  2. Wie kann ich den dritten ohne Schlüssel herausfiltern? ldap_uidnumber überhaupt?

Der Code, den ich ausprobiert habe:

for i in a:
if a[i]["ldap_uidnumber"] and a[i]["ldap_uidnumber"] == []:
print i

Das bedeutet aber nichts zu drucken, sondern den Schlüssel im dritten Wert nach diesem Code zu erstellen und sieht so aus

defaultdict(<type "list">, {"ldap_uidnumber": [], "file": ["/home/testuser/.ssh/id_rsa.pub"]})

Antworten:

3 für die Antwort № 1

Überprüfen der Mitgliedschaft mit in erstellt den Schlüssel nicht in einem defaultdict. Ich würde das empfehlen.

for i in a:
if "ldap_uidnumber" in a[i] and      # shortcircuit here in your 3rd el
not a[i]["ldap_uidnumber"]:  # fail here in your 1st el
# do something

4 für die Antwort № 2

Benutzen defaultdict.get die bei Abwesenheit keine Schlüssel erstellen und zurückkehren None wenn der Schlüssel nicht existiert oder der Wert falls vorhanden - None und [] sind beide False In einem booleschen Kontext wird Ihr Code zu:

for i in a:
if a[i].get("ldap_uidnumber", []):
# It"s not missing or empty - do something...