我正在寻找一种比较两个包含矩阵信息的字典的好方法。所以我的词典结构如下,两个词典都有相同的键:
dict_1 = {("a","a"):0.01, ("a","b"): 0.02, ("a","c"): 0.00015, ...
dict_2 = {("a","a"):0.01, ("a","b"): 0.018, ("a","c"): 0.00014, ...
如果我必须使用矩阵,即列表列表,我可以使用numpy.allclose
。是否有类似字典的内容,或者有一种很好的方式将我的字典转换成这样的矩阵?
感谢您的帮助。
答案 0 :(得分:5)
我能想到的最简单的方式:
keylist = dict_1.keys()
array_1 = numpy.array([dict_1[key] for key in keylist])
array_2 = numpy.array([dict_2[key] for key in keylist])
if numpy.allclose(array_1, array_2):
print('Equal')
else:
print('Not equal')
答案 1 :(得分:2)
有一个numpy函数,用于单元测试来比较2个数字。您可以通过significant
设置所需的精度。
import numpy as np
dict_1 = {("a","a"):0.01, ("a","b"): 0.02, ("a","c"): 0.00015}
dict_2 = {("a","a"):0.01, ("a","b"): 0.018, ("a","c"): 0.00014}
def compare_dicts(dict_1, dict_2, significant=2):
for k in dict_1:
try:
np.testing.assert_approx_equal(dict_1[k], dict_2[k],
significant=significant)
except AssertionError:
return False
return True
compare_dicts(dict_1, dict_2)
这将从一个字典中取出键并比较两个字母中的每个项目。
请参阅使用的numpy函数的详细信息here。
答案 2 :(得分:0)
您可以使用OrderedDict
按默认顺序获取值numpy.allclose
:
>>> import numpy
>>> from collections import OrderedDict
>>> dict_1 = {("a","a"):0.01, ("a","b"): 0.02, ("a","c"): 0.00015}
>>> dict_2 = {("a","a"):0.01, ("a","b"): 0.018, ("a","c"): 0.00014}
>>> d2=OrderedDict(sorted(dict_2.items(), key=lambda t: t)) #d2.values() -> [0.01, 0.018, 0.00014]
>>> d1=OrderedDict(sorted(dict_1.items(), key=lambda t: t))
>>> atol=0.0001 # as example
>>> numpy.allclose(d1.values(),d2.values())
False