Python:检查嵌套字典中指定键是否存在的方法
检查嵌套字典中的指定键
嘿,我来帮你捋捋这个嵌套字典键检查的问题~你的代码思路方向是对的,但有个小细节没处理好,导致结果可能不符合预期。
先看你的原始代码:
print(any(0 in d for d in x if '11' in d))
这里的问题在于:当'11' in d成立时,d是列表x里的外层字典(也就是{'11': {...}}),你直接检查0 in d,其实是在判断0是不是这个外层字典的键——但0是在d['11']这个嵌套字典里的,所以这行代码会返回False,和你想要的结果不符。
正确的写法
我们需要先确认'11'存在于外层字典中,再深入到它对应的值里检查键0是否存在。这里有两种清晰的实现方式:
方式一:用any()一次性判断两个条件
x = [{ '11': { 0: [ { 'bb_id': '122', 'cc_id': '4343' } ], 1: [ { 'bb_id': '4334', 'cc_id': '3443' }, { 'bb_id': '5345', 'cc_id': '257' } ] } }] # 同时检查'11'存在,且其对应的值中包含键0 has_required_keys = any('11' in d and 0 in d['11'] for d in x) print(has_required_keys) # 输出 True
这段代码里,any()会遍历x中的每个字典d:
- 先判断
'11'是否在d中; - 只有当第一个条件成立时,才会继续检查
0是否在d['11']这个嵌套字典里; - 只要有一个字典满足这两个条件,
any()就会返回True。
方式二:拆分为两步检查(更直观)
如果你需要分别知道'11'是否存在、以及0是否在'11'的值中,也可以拆成两步:
x = [{ '11': { 0: [ { 'bb_id': '122', 'cc_id': '4343' } ], 1: [ { 'bb_id': '4334', 'cc_id': '3443' }, { 'bb_id': '5345', 'cc_id': '257' } ] } }] # 第一步:检查列表中是否有字典包含'11'键 has_key_11 = any('11' in d for d in x) # 第二步:如果'11'存在,检查它的值里是否有键0 has_key_0_in_11 = False if has_key_11: # 找到第一个包含'11'的字典(如果需要检查所有,去掉break即可) for d in x: if '11' in d: has_key_0_in_11 = 0 in d['11'] break print(f"'11'是否存在: {has_key_11}") # 输出 True print(f"键0是否在'11'对应的值中: {has_key_0_in_11}") # 输出 True
额外提示
如果你的列表x中可能有多个包含'11'的字典,且需要所有这些字典的'11'值里都包含键0,只需把any()换成all()即可,逻辑类似。
内容的提问来源于stack exchange,提问作者Ming Chow
相关产品推荐
相关产品推荐

