python defaultdict如何在不创建键的情况下检查嵌套键是否存在或是否为[]
结构为python defaultdict如何在不创建键的情况下检查嵌套键是否存在或是否为[],python,dictionary,data-structures,defaultdict,Python,Dictionary,Data Structures,Defaultdict,结构为a=defaultdict(lambda:defaultdict(list))的嵌套defaultdicta中有3种类型的条目 但这不是打印任何内容,而是在代码后面的第三个值中创建键,看起来像 defaultdict(<type 'list'>, {'ldap_uidnumber': [], 'file': ['/home/testuser/.ssh/id_rsa.pub']}) defaultdict(,{'ldap_uidnumber':[],'file':['/home
a=defaultdict(lambda:defaultdict(list))
的嵌套defaultdicta
中有3种类型的条目
但这不是打印任何内容,而是在代码后面的第三个值中创建键,看起来像
defaultdict(<type 'list'>, {'ldap_uidnumber': [], 'file': ['/home/testuser/.ssh/id_rsa.pub']})
defaultdict(,{'ldap_uidnumber':[],'file':['/home/testuser/.ssh/id_rsa.pub']})
在中使用检查成员身份不会在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
,它在缺席时不会创建键,如果键不存在或存在值-None
和[]
在布尔上下文中都是False
,则返回None
,因此代码变为:
for i in a:
if a[i].get('ldap_uidnumber', []):
# It's not missing or empty - do something...
如果a[i].get(“ldap\u uidnumber”):
?谢谢。工作起来很有魅力。你在这里必须小心,因为你会在第二和第三项上进入这个区块。我的假设是OP正在寻找具有ldap\u uidnumber
键为空的元素,并试图排除没有该键的元素。@Kasramvddefaultdict.get
将返回默认值None
,除非另有说明…@JonClements他试图区分不存在的键和空值,虽然None
在这里起作用:如果您正在测试缺少的键:如果[i].get('ldap\u uidnumber')为None:
如果您正在测试空值:如果不是[i].get('ldap\u uidnumber'))
@Kasramvd您将遇到的问题是,您的默认值恰好等于字典中的值。好的-我已更改为空列表的默认值-这样-无论它是否存在(空列表始终是否定的)-因此这更接近于@AdamSmith在逻辑方面的回答。。。(例如,如果一个键有一个None
值-使用None
作为默认值会略有不同)
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
for i in a:
if a[i].get('ldap_uidnumber', []):
# It's not missing or empty - do something...