python dict:检查嵌套字典中是否存在键

时间:2020-08-09 14:15:52

标签: python python-3.x dictionary

我正在尝试检查dict中是否存在嵌套键:

例如:

x = [{ 
        '11': { 
           0: [{'bb_id': '122',
           'cc_id': '4343'}],
           
           1: [{'bb_id': '4334',
           'cc_id': '3443'},
           {'bb_id': '5345',
           'cc_id': '257'}]
            
        }
   }]

检查11的密钥中是否存在x,并进一步检查0中的11是否存在。

我尝试做,

print(any(0 in d for d in x if '11' in d))

4 个答案:

答案 0 :(得分:1)

您拥有的是一列字典,其中包含值作为字典列表的一列。

尝试这种单行列表理解。 x以下是字典的列表(在这种情况下为单个字典)。如果x'11' exists in its key,则下面的代码对0 exists in the key of value of '11'中的每个字典返回True。只有同时满足两个条件,您才能获得TRUE否则FALSE-

  1. 遍历x个项目
  2. 迭代x项中的字典
  3. 检查x中的项是否具有键='11',以及x中的dict中的项是否具有键= 0
  4. 如果同时满足两个条件,则返回True,否则返回False
#Items to detect
a = '11'
b = 0

#Iterate of the nested dictionaries and check conditions
result = [(k==a and b in v.keys()) for i in x for k,v in i.items()]
print(result)
[True]

答案 1 :(得分:1)

看来这可以实现您想要做的事情:

print(['11' in d.keys() and 0 in d['11'].keys() for d in x])

说明:

  • 遍历名为x的列表中的每个字典
  • 在每个词典中搜索键“ 11”,并在其值中搜索键“ 0”
  • 如果两个条件都满足,则打印True;否则,打印False

答案 2 :(得分:0)

原始方法可能只是一个if条件:

if '11' in x[0]:
    print("11 in x")

if 0 in x[0]['11']:
    print("0 in 11")

您还可以使用for循环:

for d in x:
    if '11' in d:
        print("11 in d")
        if any(d['11']) and 0 in d['11']:
            print("0 in 11")

答案 3 :(得分:0)

has_key = lambda key, _dict: re.search("{%s" % str(key),   str(_dict).replace(" ", ""))