python defaultdict 如何在不创建密钥的情况下检查嵌套密钥是否存在或是否为 []
python defaultdict how can I check if a nested key exists or is [] without creating the key
结构 a=defaultdict(lambda: defaultdict(list))
.
的嵌套 defaultdict a
中有 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']})
使用 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
使用 defaultdict.get
,它不会在不存在时创建键,如果键不存在或值存在时将 return None
- None
和[]
在布尔上下文中都是 False
,因此您的代码变为:
for i in a:
if a[i].get('ldap_uidnumber', []):
# It's not missing or empty - do something...
结构 a=defaultdict(lambda: defaultdict(list))
.
a
中有 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']})
使用 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
使用 defaultdict.get
,它不会在不存在时创建键,如果键不存在或值存在时将 return None
- None
和[]
在布尔上下文中都是 False
,因此您的代码变为:
for i in a:
if a[i].get('ldap_uidnumber', []):
# It's not missing or empty - do something...