python字典匹配两个字典中的键值

标签 python

在下面显示的字典中,我想检查 aa 中的键是否与 bb 中的键匹配,以及它对应的值是否与 bb 中的匹配。有没有更好的方法来编写这段代码

  aa = {'a': 1, 'c': 3, 'b': 2}
  bb = {'a': 1, 'b': 2}

  for k in aa:
    if k in bb:
      if aa[k] == bb[k]:
         print "Key and value bot matches in aa and bb"

最佳答案

使用集合来查找所有等价物:

for (key, value) in set(aa.items()) & set(bb.items()):
    print '%s: %s is present in both aa and bb' % (key, value)

此处的 & 运算符为您提供了 intersection of both sets ;或者你可以写:

set(aa.items()).intersection(set(bb.items()))

请注意,这确实会创建两个字典的完整副本,因此如果它们非常大,这可能不是最佳方法。

一个捷径是只测试按键:

for key in set(aa) & set(bb):
    if aa[key] == bb[key]:
        print '%s: %s is present in both aa and bb' % (key, value)

这里你只复制每个字典的键以减少内存占用。

当使用 Python 2.7 时,dict 类型包括 additional methods直接创建所需的集合:

for (key, value) in aa.viewitems() & bb.viewitems():
    print '%s: %s is present in both aa and bb' % (key, value)

这些在技术上是 dictionary views但就此问题而言,它们的行为相同。

关于python字典匹配两个字典中的键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10832373/

相关文章:

python - 如何在某个索引处中断 while 循环然后运行到列表末尾?

python - 在函数之间传递两个变量

python - Keras Functional API 在每个 API 中更改层名称

python - Pandas 连接到 Oracle Db 无需连接字符串

使用 IPython 时,python 推特模块在 __init__ 期间看不到 _file_cache 加载

python - 如何使用python从azure aks获取kubectl配置?

Python:循环遍历 xmltodict 创建的所有嵌套键值对

python - 返回生成器或迭代器生成的所有元素的标准方法

python - 我如何比较 pandas 中具有相同类别的两个日期列

python - 无需缝合图像的OpenCV曝光补偿