尝试验证每个数组项是否在字典数组中
verify_obj = {5492: [2, 3]}
sc = [{'key': 2, 'key_2': 4}, {'key': 4, 'key_2': 5}, {'key': 5, 'key_2': 7}, {'key': 6, 'key_2': 10}]
for k, v in verify_obj.items():
if all(i for i in v) != any(j['key1'] for j in sc):
print('test fail')
期望在控制台中打印test fail
3
数组[2, 3]
不在sc
对象中,但邮件未打印。
出了什么问题?
答案 0 :(得分:2)
唯一需要做的改变是您的评估:<Style x:Key="DataGridCellUniversalStyle" TargetType="DataGridCell">
- style definition
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsReadOnly" Value="True"/>
<Condition Property="MyParentDataGrid.VisualizeReadOnlyCells" Value="True"/>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Background" Value="Gray"/>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
。
disableClose
if all(i for i in v) != any(j['key'] for j in sc)
和verify_obj = {5492: [2, 3]}
sc = [{'key': 2}, {'key': 4}, {'key': 5}, {'key': 10}]
for k, v in verify_obj.items():
if not all([True if x in [values for dict_i in sc for values in dict_i.values()] else False for x in v]):
print('test fail')
检查any()
,即当前元素all()
?您要检查的是:if el
,True
。
例如,这将打印&#34;测试失败&#34;为你的例子:
True != True
但这仅仅是因为False
或if all(i for i in v) == any(j['key'] for j in sc)
中没有False
个值,因为在针对any()
进行评估时,没有整数为all()
。
相反,请检查False
的任何字典中是否存在bool
中的任何值。
全部/任何功能参考:https://docs.python.org/3/library/functions.html#any
答案 1 :(得分:2)
如果any()
列表中的任何值不在verify_obj
中,请使用sc
条件检查。 sub
包含verify_obj
中的列表。 sup
是sc
中的值列表。
verify_obj = {5492: [2, 3]}
sc = [{'key': 2}, {'key': 4}, {'key': 5}, {'key': 10}]
sub = next(iter(verify_obj.values()))
sup = [v for d in sc for k, v in d.items() if k == "key"]
if any(v not in sup for v in sub):
print("test fail")
issubset()
也可以实现这一目标。要使用它,verify_obj
中的列表必须转换为集合。用于该函数的参数是sc
中的一组值。
verify_obj = {5492: [2, 3]}
sc = [{'key': 2}, {'key': 4}, {'key': 5}, {'key': 10}]
s = set(next(iter(verify_obj.values())))
if not s.issubset(v for d in sc for k, v in d.items() if k == "key"):
print("test fail")