首页 > 解决方案 > Python - 比较两个字典[匹配区分大小写的值]

问题描述

我正在尝试在 Python 中比较两个字典(包含数组的列表)。

这里有两个字典:

tag=[{'Key': 'Base', 'Value': 'ny'}, {'Key': 'Name', 'Value': 'newyork'}]

filters=[{'Key': 'Name','Value': ['Newyork', 'newyork','NewYork']}]

这里的任务是将filtersdict与tagdict进行比较。

以下我尝试过的方法不起作用:

>>> tag == filters
False
>>> tag[1] == filters
False
>>> tag[1] == filters[0]
False

我想检查是否tag有一个与之匹配的数组filters应该返回true

可能,它能够比较Key数组中的值,因为它有一个完全匹配的字符串,但是Value在不同的情况下写入相同的字符串,它不匹配。

我想在比较时涵盖的内容:

任何帮助表示赞赏。提前致谢!

标签: pythondictionary

解决方案


这些都是非常奇怪的数据结构,但我认为它们是 aws cli/api 返回的那种东西。我敢打赌,有一种 cli/api 方法可以过滤您正在尝试执行的操作,您真的应该发布一个关于您尝试从 aws 查询什么的问题(请参阅参考资料)。但暂时忽略这一点:

请注意,这tag不是字典,而是字典列表。您需要首先选择其中包含的字典Key:Name

next(element for element in tag if element['Key'] == 'Name')
=> {'Key': 'Name', 'Value': 'newyork'}

或者更确切地说,您想选择与Key:xxx您的过滤器相同的字典。

next(element for element in tag if element['Key'] == filters[0]['Key'])
=> {'Key': 'Name', 'Value': 'newyork'}

现在您想将Value所选字典中的内容与您的过滤器进行比较Value

selectedDict=next(element for element in tag if element['Key'] == filters[0]['Key'])
selectedDict['Value'] in filters[0]['Value']
=> True

在一行中,

next(element for element in tag if element['Key'] == filters[0]['Key'])['Value'] in filters[0]['Value']
=> True

推荐阅读