将具有各种数据类型的两个词典作为值进行比较

时间:2016-06-27 18:19:32

标签: python matplotlib

最好通过一个例子来展示。我正在从matplotlib图中获取“属性”字段。它是一个具有不同键和值的字典。

keys = gca().properties().keys
ax1 = gca().properties()

然后我正在绘制其他内容,我又采取了另一个实例

ax2 = gca().properties()

现在假设相同的键对ax2有效(我认为它们是,因为我没有改变绘图类型),我如何比较ax1和ax2的每个值?这些值都是不同的数据类型,简单的比较不起作用。我试过了

for key in keys:
    if ax1[key]!=ax2[key]:
        print(key,ax1[key])

我得到了

Traceback (most recent call last):

  File "<ipython-input-46-363fb313494e>", line 2, in <module>
    if ax1[key]!=ax2[key]:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我实际上想要找到两个图之间不同的字段的名称和值。有没有办法处理如此复杂的数据结构?

2 个答案:

答案 0 :(得分:1)

问题是numpy数组不支持转换为bool, 所以问题不是!=比较,而是if语句试图将obejct转换为bool以查看它是True还是{{1}这一步失败了。

诀窍是检查值是否为False,如果是,请使用ndarray.all()将比较结果转换为.any():< / p>

bool

使用# assuming: import numpy as np for key in keys: val1, val2 = ax1[key], ax2[key] are_different = val1 != val2 if isinstance(val1, np.ndarray): are_different = are_different.any() if are_different: print(key,ax1[key]) 意味着如果这些数组中的单个条目不同,则认为它们不同。如果您希望所有条目都不同,请将其替换为.any()

答案 1 :(得分:0)

似乎知道内置deepdiff函数需要两个对象并进入所有子方法来查找差异。建立自己的功能。