Python:验证每个数组项是否在字典数组中

时间:2017-10-16 14:31:12

标签: python-3.x

尝试验证每个数组项是否在字典数组中

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对象中,但邮件未打印。
出了什么问题?

2 个答案:

答案 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 elTrue

例如,这将打印&#34;测试失败&#34;为你的例子:

True != True

但这仅仅是因为Falseif 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中的列表。 supsc中的值列表。

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")