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"]})
- Wie filtere ich den zweiten heraus, mit
ldap_uidnumber: []
? - 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...