Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查其他字典关键字中的值_Python - Fatal编程技术网

Python 如何检查其他字典关键字中的值

Python 如何检查其他字典关键字中的值,python,Python,我有下面的强制钥匙 字段=['b1','b2','b3'] 我的字典在下面 正文={'a':1,'b':[{'b1':1,'b2':2,'b3':3},{'b1':4,'b2':5,'b3':6}]} 在body的b键中,我需要检查字段中的所有值是否存在 如果字段=['b1','b2','b4']我需要False,因为b4不存在于主体['b'] 如果body={'a':1,'b':[{'b1':1,'b2':2,'b3':3},{'b1':4,'b2':5,'b4':6}]},那么我还需要Fal

我有下面的强制钥匙

字段=['b1','b2','b3']

我的字典在下面

正文={'a':1,'b':[{'b1':1,'b2':2,'b3':3},{'b1':4,'b2':5,'b3':6}]}

在body的b键中,我需要检查字段中的所有值是否存在

如果字段=['b1','b2','b4']我需要False,因为b4不存在于主体['b']

如果body={'a':1,'b':[{'b1':1,'b2':2,'b3':3},{'b1':4,'b2':5,'b4':6}]},那么我还需要False,因为b4不在字段中

我的代码在下面

Listach中的所有字段。字段中字段的正文['b']中每个字段的键

每次我实现时

如何创建一个lambda函数,如下所示:

>>> fields = ['b1', 'b2', 'b3']
>>> body = {'a': 1, 'b': [{'b1': 1, 'b2': 2, 'b3': 3}, {'b1': 4, 'b2': 5, 'b3': 6}]}
>>> trueFalse = lambda x, y: [TorF in y for TorF in x].count(True) == len(x)
>>> all((trueFalse(list(x.keys()),fields)) for x in body["b"] )
True
>>>
>>> body = {'a': 1, 'b': [{'b1': 1, 'b2': 2, 'b3': 3}, {'b1': 4, 'b2': 5, 'b4': 6}]}
>>> all((trueFalse(list(x.keys()),fields)) for x in body["b"] )
False
按如下方式创建lambda函数如何:

>>> fields = ['b1', 'b2', 'b3']
>>> body = {'a': 1, 'b': [{'b1': 1, 'b2': 2, 'b3': 3}, {'b1': 4, 'b2': 5, 'b3': 6}]}
>>> trueFalse = lambda x, y: [TorF in y for TorF in x].count(True) == len(x)
>>> all((trueFalse(list(x.keys()),fields)) for x in body["b"] )
True
>>>
>>> body = {'a': 1, 'b': [{'b1': 1, 'b2': 2, 'b3': 3}, {'b1': 4, 'b2': 5, 'b4': 6}]}
>>> all((trueFalse(list(x.keys()),fields)) for x in body["b"] )
False
使用集

a = set(body['b'][0]) | set(body['b'][1])
b = set(fields)
c = a ^ b
print(c)
if len(c):
    print(False)
else:
    print(True)
使用集

a = set(body['b'][0]) | set(body['b'][1])
b = set(fields)
c = a ^ b
print(c)
if len(c):
    print(False)
else:
    print(True)

如果您确实需要列表理解,这是可行的:

字段=['b1','b2','b3'] 正文={'a':1,'b':[{'b1':1,'b2':2,'b3':3},{'b1':4,'b2':5,'b4':6}]} printFalse不在[i in字段中,i in[item for subl in[listd.keys for d in body['b']]for item in subl]] 输出:

错误的
但在这一点上,您还可以使用正则for循环。

如果您确实需要列表理解,这是可行的:

字段=['b1','b2','b3'] 正文={'a':1,'b':[{'b1':1,'b2':2,'b3':3},{'b1':4,'b2':5,'b4':6}]} printFalse不在[i in字段中,i in[item for subl in[listd.keys for d in body['b']]for item in subl]] 输出:

错误的
但此时,您最好使用常规for循环。

您可以尝试使用functools:

在dicts中查找所有相交键 检查相交键中的字段
您可以尝试使用以下工具:

在dicts中查找所有相交键 检查相交键中的字段
你总是在变为现实,因为你的代码都是在一系列生成器上完成的

正如另一位所说,理解是不可读的,因此不推荐这样做

如果您仍然需要它,您可以使用:

body = {'a': 1, 'b': [{'b1': 1, 'b2': 2, 'b3': 3}, {'b1': 4, 'b2': 5, 'b3': 6}]}

fields = ['b1', 'b2', 'b4']
out = all(all((f in each.keys() for f in fields)) for each in body['b'])
print(out)  #=> False

fields = ['b1', 'b2', 'b3']
out = all(all((f in each.keys() for f in fields)) for each in body['b'])
print(out)  #=> True

你总是在变为现实,因为你的代码都是在一系列生成器上完成的

正如另一位所说,理解是不可读的,因此不推荐这样做

如果您仍然需要它,您可以使用:

body = {'a': 1, 'b': [{'b1': 1, 'b2': 2, 'b3': 3}, {'b1': 4, 'b2': 5, 'b3': 6}]}

fields = ['b1', 'b2', 'b4']
out = all(all((f in each.keys() for f in fields)) for each in body['b'])
print(out)  #=> False

fields = ['b1', 'b2', 'b3']
out = all(all((f in each.keys() for f in fields)) for each in body['b'])
print(out)  #=> True

考虑到您的数据结构

body = {'a': 1, 'b': [{'b1': 1, 'b2': 2, 'b3': 3}, {'b1': 4, 'b2': 5, 'b3': 6}]}
您可以通过以下方式找到正文['b']列表中dicts中的所有键:

然后可以使用集合减法查找所有缺少的字段:

fields = ['b1', 'b2', 'b3']
required_fields = set(fields)
missing = required_fields - present_fields
print("MISSING2:", missing)
打印集,即空集,无必填字段缺失

另一个例子是:

fields = ['b1', 'b2', 'b4']
required_fields = set(fields)
missing = required_fields - present_fields
print("MISSING2:", missing)

它打印{b4'},表示缺少b4字段。

给定您的数据结构

body = {'a': 1, 'b': [{'b1': 1, 'b2': 2, 'b3': 3}, {'b1': 4, 'b2': 5, 'b3': 6}]}
您可以通过以下方式找到正文['b']列表中dicts中的所有键:

然后可以使用集合减法查找所有缺少的字段:

fields = ['b1', 'b2', 'b3']
required_fields = set(fields)
missing = required_fields - present_fields
print("MISSING2:", missing)
打印集,即空集,无必填字段缺失

另一个例子是:

fields = ['b1', 'b2', 'b4']
required_fields = set(fields)
missing = required_fields - present_fields
print("MISSING2:", missing)

它打印出{b4'},意味着b4字段丢失。

您是否尝试过先编写一个简单的for循环?@mkrieger1我需要先使用列表理解,然后再编写一个循环,一旦它正常工作,您就可以机械地将其转换为列表理解。顺便说一句,您编写的不是列表理解。这应该有效。。。。。。[False if False in[True if lensetlistb.keys+fields==lenb.keys else False for b in body['b']]else True]你试过先写一个简单的for循环吗?@mkrieger1我需要使用列表理解,然后先写一个循环,然后在它正常工作后,你可以机械地将它转换为列表理解。顺便说一句,你写的不是列表理解。这应该行得通……[如果在[如果lensetlistb.keys+fields==lenb.keys else False,则为True,对于正文中的b['b']]else True]或使用frozenset或使用frozenset