Python3:比较两个字典之间的特定键和值对



>编辑:如果它有助于上下文,我实际上正在尝试将其推广为在 for 和 while 循环中工作,我希望这样的东西可以工作

if dictA[certainkey:'certainvalue'] == dictB[certainkey:'certainvalue']:
return True

原始问题:有没有办法比较 Python3 中两个字典中的相同键以查看它们是否具有相同的值?

例如,假设

dictA = {1:'Y', 2:'E', 3:'E'}
dictB = {1:'Y', 2:'A', 3:'W'}

我希望程序在字典 A 中的一组键值对与字典 B 中的同一组键值对匹配时返回一个 True 值。在这种情况下,键 1 与字典 A 和字典 B 中的值"Y"配对。我不知道是否有好的方法可以做到这一点,所以我自然而然地尝试了

print(dictA[1:'Y'] == dictB[1:'Y'])

希望能给我一个真实的印刷品。由于它不起作用(而且我对字典还不够了解(,我想知道是否有其他方法可以做到这一点。谢谢!

您可以合并相等(键、值(对上的字典,然后对合并的字典运行后续检查。

>>> dictA = {1:'Y', 2:'E', 3:'E'}
>>> dictB = {1:'Y', 2:'A', 3:'W'}
>>> 
>>> merged = dict(dictA.items() & dictB.items())
>>> merged
{1: 'Y'}
>>> 
>>> 1 in merged
True
>>> 3 in merged
False

创建merged是无痛的,因为dict.keysdict.valuesdict.items的返回值支持set接口,如并集、交集等操作。

警告:在字典中需要可哈希值。如果您有不可哈希的值,请通过以下方式创建merged

>>> b_items = dictB.items()
>>> merged = dict(pair for pair in dictA.items() if pair in b_items)

首先获取字典之间的匹配键,然后使用字典推导来比较这些匹配键中的每一个。

matching_keys = dictA.keys() & dictB.keys()
>>> {k: dictA[k] == dictB[k] for k in matching_keys}
{1: True, 2: False, 3: False}

若要仅获取值匹配的键,请使用列表推导式:

keys_with_matching_values = [k for k in matching_keys if dictA[k] == dictB[k]]
# Or: [k for k in dictA if k in dictA and dictA[k] == dictB[k]]
>>> keys_with_matching_values
[1]

请注意,这两种方法都是内存效率高的,因为一种方法不会不必要地将匹配值存储在字典中。

for key in dictA
i = 0
if key in dictA:
word = dictA[0][i]
if dictA[0][i] == dictB[0][0]:
print(word + 'matches dict 0')
if dictA[0][i] == dictB[0][1]:
print(word + 'matches dict 1')
if dictA[0][i] == dictB[0][2]:
print(word + 'matches dict 2')
i += 1

我在下班的班车上写得非常快,它很草率,我可以为 dictB 做一个循环。但这应该适用于自动化查找单词的过程。(但可能不起作用,因为我写得很快(

你可以做你在列表理解中提到的

print([True if dicta[k] == dictb[k] else False for k in dicta])
# [True, False, False]

扩大

for k in dicta:
if dicta[k] == dictb[k]:
print(True)
else:
print(False)

最新更新