结构a
的嵌套defaultdict a=defaultdict(lambda: defaultdict(list))
中有3种类型的条目。
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']})
ldap_uidnumber: []
过滤掉第二个?ldap_uidnumber
的情况下过滤掉第三个?我试过的代码:
for i in a:
if a[i]["ldap_uidnumber"] and a[i]["ldap_uidnumber"] == []:
print i
但这不是打印任何内容,而是在此代码之后的第三个值中创建键,看起来像
defaultdict(<type 'list'>, {'ldap_uidnumber': [], 'file': ['/home/testuser/.ssh/id_rsa.pub']})
答案 0 :(得分:4)
使用defaultdict.get
在缺席时不会创建密钥,如果密钥不存在则返回None
,如果存在则返回值None
和{{ 1}}在布尔上下文中都是[]
,因此您的代码变为:
False
答案 1 :(得分:3)
使用in
检查成员身份不会在defaultdict中创建密钥。我会推荐。
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